嗨我有这行代码,我不能让它工作 目标很简单,将form1设置为visible = false
public static void DoActions(string Cmd){
if(Cmd == true)
{
MainForm.Visible = false;
}
}
但我一直有这个错误
需要对象引用 非静态字段,方法或 属性
通常我将被调用的methond设置为静态..因此错误将消失 但在这种情况下我该怎么做?
感谢任何帮助人员
'System.Windows.Forms.Control.Invoke(System.Delegate)'
答案 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;