Winforms C#setting form.visible=方法内部为false?

Winforms C#setting form.visible=方法内部为false?,winforms,methods,visible,Winforms,Methods,Visible,嗨,我有这行代码,我不能让它工作 目标很简单,将form1设置为visible=false public static void DoActions(string Cmd){ if(Cmd == true) { MainForm.Visible = false; } } 但我一直有这个错误 需要一个对象引用 非静态字段、方法或 财产 通常我会将调用的method设置为static。。这样错误就会消失 但在这种情况下,我该怎么做呢 谢谢你们的帮助 'System.Windows.Forms.

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

public static void DoActions(string Cmd){

if(Cmd == true)
{

MainForm.Visible = false;
}
}
但我一直有这个错误

需要一个对象引用 非静态字段、方法或 财产

通常我会将调用的method设置为static。。这样错误就会消失 但在这种情况下,我该怎么做呢

谢谢你们的帮助

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


之所以发生这种情况,是因为
DoActions
是一个静态方法而不是实例方法,而
MainForm
是一个实例字段/属性。区别在于实例方法在定义它们的类的实例上运行,而静态方法则不运行

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

// Instance field
Form1 MainForm;

void InstanceMethod()
{
    Form1 frm = this.MainForm;
}
您不能从静态方法内部执行相同的操作(想想看,它将在哪个实例上运行?)。请注意,C#将隐含地假定在有意义的地方使用
this
关键字(因此上面的示例可以写成
Form1 frm=MainForm

有关静态方法与实例方法的另一种解释,请参见(这是面向对象编程中的一个重要概念,您应该花时间正确理解)

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


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

您的方法是静态的,因此无法访问MainForm。 如果不要求方法是非静态的,则使其成为非静态的

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


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

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

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

嗨,克拉根,谢谢你的解释。这让我明白了为什么我会有这个问题。。您是否建议我将方法更改为非静态方法?@Katherina您可以将
MainForm
更改为静态或
DoActions
更改为非静态(或在访问
MainForm
时提供一个实例,例如
someForm.MainForm
)。你需要做什么取决于你的应用程序-在这个例子中,如果不知道更多的上下文,很难说出。嗨,Kragen,谢谢你的帮助,我现在可以说我很高兴我解决了我的问题。谢谢
        this.Opacity = 0;
        this.ShowInTaskbar = false;