2011-05-16 2 views
0

안녕하세요 난C# 설정 form.visible = false 메서드 내에서?

public static void DoActions(string Cmd){ 

if(Cmd == true) 
{ 

MainForm.Visible = false; 
} 
} 

거짓 내가 그것을 목표는 볼에 Form1을 설정 간단 를 작동하게 기운이 코드 라인 =이하지만 난이 오류

에게 객체 참조를 가지고 계속

일반적 나 정전기에 호출을 설정 methond 비 정적 필드, 메소드 또는 속성 필요 .. 그래서 오류가 멀리 이동합니다 하지만이 경우 어떻게해야합니까? 어떤 도움들

'System.Windows.Forms.Control.Invoke (System.Delegate)'

답변

1

DoActions 정적 메서드가 인스턴스가 아닌 있기 때문에 이런 일이에 대한

감사 메서드를 사용하지만 MainForm은 인스턴스 필드/속성입니다. 그 차이점은 인스턴스 메소드가 정의 된 클래스의 인스턴스에서 작동한다는 것입니다. 정적 메소드는 정의하지 않습니다.

는 의미 인스턴스 방법은 예를 들어, this 키워드를 통해 속성, 필드와 그 포함하는 클래스의 메서드에 액세스 할 수 있습니다 wheras :

// Instance field 
Form1 MainForm; 

void InstanceMethod() 
{ 
    Form1 frm = this.MainForm; 
} 

당신은 정적 메서드 내부에서 같은 일을 할 수 없습니다 (그것에 대해 생각해보십시오, 어떤 인스턴스가 작동할까요?). C#에서는 암시 적으로 this 키워드를 사용하는 것으로 가정합니다 (위의 예는 Form1 frm = MainForm으로 작성되었을 수 있습니다).

static vs 인스턴스 메소드에 대한 대체 설명은 C# Static Methods을 참조하십시오. 이는 객체 지향 프로그래밍에서 중요한 개념으로 올바르게 이해해야합니다. 당신의 예에서

당신은 아마는 (정적 선언을 제거하여) 인스턴스 메서드에 DoActions을 변경하려면 :

public void DoActions(string Cmd) 
{ 
    if(Cmd == true) 
    { 
     this.MainForm.Visible = false; 
    } 
} 

이, 그것은 인스턴스 MainForm 필드/속성에 액세스 할 수 있지만이 할 수있다 객체 인스턴스를 제공하지 않고 DoActions을 다른 정적 메서드에서 호출하려는 위치에서 코드의 다른 부분에서 문제를 일으킬 수 있습니다.

+0

안녕 크레 이건, 설명 주셔서 감사합니다. 이제는 왜 내가 그 문제를 가지고 있는지 이해하게 만들었 어. 내 방법을 정적이 아닌 방법으로 바꿀 것을 제안 해? – Katherina

+0

@Katherina'MainForm'을 정적으로 변경하거나'DoActions'를 정적으로 변경하거나 ('MainForm'에 액세스 할 때 인스턴스를 제공하십시오, 예를 들어'someForm.MainForm') 변경할 수 있습니다. 당신이해야 할 일은 당신의 어플리케이션에 달려 있습니다 - 더 많은 문맥을 알지 못하고이 예제에서 말하기는 어렵습니다. – Justin

+0

안녕하세요 크라 겐, 도움을 주셔서 감사합니다. 지금 제 문제를 해결해 드리겠습니다. 감사! – Katherina

0

귀하의 방법은 정적이므로 MainForm에 액세스 할 수 없습니다. 필요하지 않은 경우 메서드를 정적이 아니게 만듭니다.

public void DoActions(string Cmd) 

{ 경우 (참 Cmd를 ==) { MainForm.Visible = 거짓; } }

경우 필요입니다, 당신의 클래스의 정적 필드를 생성하고이 방법을 실행하기 전에이 설정되어 있는지 확인하십시오.속성 창에서

0

설정 양식 불투명도 및하여 ShowInTaskBar 특성 :

 this.Opacity = 0; 
     this.ShowInTaskbar = false;