C # параметр form.visible = false внутри метода? - PullRequest
0 голосов
/ 16 мая 2011

привет, у меня есть эти строки кода, которые я не могу заставить его работать цель проста, установив form1 в видимый = false

public static void DoActions(string Cmd){

if(Cmd == true)
{

MainForm.Visible = false;
}
}

но я продолжаю иметь эту ошибку

Ссылка на объект требуется для нестатическое поле, метод или недвижимость

обычно я устанавливаю вызываемый метонд в статическое состояние, поэтому ошибка исчезнет а в этом случае как мне это сделать?

спасибо за любую помощь, ребята

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

Ответы [ 3 ]

1 голос
/ 16 мая 2011

Это происходит потому, что DoActions является статическим методом, а не методом экземпляра, однако MainForm является полем / свойством экземпляра.Различие состоит в том, что методы экземпляра работают с экземпляром класса, в котором они определены, тогда как статические методы этого не делают.

Это означает, что методы экземпляра могут получить доступ к свойствам, полям и методам их содержащего класса.через ключевое слово this, например:

// Instance field
Form1 MainForm;

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

Вы не можете сделать то же самое из статического метода (подумайте, на каком экземпляре он будет работать?).Обратите внимание, что C # будет неявно предполагать использование ключевого слова this в тех местах, где оно имеет смысл (поэтому приведенный выше пример мог бы быть записан как Form1 frm = MainForm).

См. C # Статические методы для альтернативного объяснения методов static против экземпляра (это важная концепция в объектно-ориентированном программировании, которую вы должны уделить время для правильного понимания).

В вашем примере вы , вероятно, хотитезамените DoActions на метод экземпляра (удалив статическое объявление):

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

Это позволит ему получить доступ к полю / свойству экземпляра MainForm, однако это может вызвать проблемы в другом месте вашего кода вместа, где вы пытаетесь вызвать DoActions из другого статического метода без предоставления экземпляра объекта.

0 голосов
/ 16 мая 2011

Установить прозрачность формы и свойство showintaskbar в окне свойств:

        this.Opacity = 0;
        this.ShowInTaskbar = false;
0 голосов
/ 16 мая 2011

Ваш метод статичен и поэтому не может получить доступ к MainForm. Сделайте ваш метод нестатичным, если это не обязательно.

public void DoActions(string Cmd)

{ if (Cmd == true) { MainForm.Visible = false; } }

Если требуется , создайте статическое поле в своем классе и убедитесь, что оно установлено до запуска этого метода.

...