一个方法里面的C#设置form.visible = false?

时间:2011-05-16 01:31:12

标签: winforms methods visible

嗨我有这行代码,我不能让它工作 目标很简单,将form1设置为visible = false

public static void DoActions(string Cmd){

if(Cmd == true)
{

MainForm.Visible = false;
}
}

但我一直有这个错误

  

需要对象引用   非静态字段,方法或   属性

通常我将被调用的methond设置为静态..因此错误将消失 但在这种情况下我该怎么做?

感谢任何帮助人员

  

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

3 个答案:

答案 0 :(得分:1)

这是因为DoActions是静态方法而不是实例方法,但MainForm是实例字段/属性。区别在于实例方法对定义它们的类的实例进行操作,而静态方法则不然。

这意味着wheras实例方法可以通过this关键字访问其包含类的属性,字段和方法,例如:

// Instance field
Form1 MainForm;

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

你不能在静态方法中做同样的事情(考虑一下,它会操作什么实例?)。请注意,C#将隐含地假定在有意义的地方使用this关键字(因此上面的示例可能已写为Form1 frm = MainForm)。

有关静态vs实例方法的替代解释,请参阅C# Static Methods(这是面向对象编程中的一个重要概念,您应该花时间正确理解)。

在您的示例中,可能想要将DoActions更改为实例方法(通过删除静态声明):

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

这将允许它访问实例MainForm字段/属性,但是在您尝试从另一个静态方法调用DoActions而不提供对象实例的地方,这可能会导致代码中的其他地方出现问题

答案 1 :(得分:0)

您的方法是静态的 - 因此无法访问MainForm。 如果不需要,请使您的方法非静态。

public void DoActions(string Cmd)

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

如果需要 ,则在类中创建一个静态字段,并确保在此方法运行之前设置它。

答案 2 :(得分:0)

在属性窗口中设置表单不透明度和showintaskbar属性:

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