C# 如何在静态上下文中隐藏Windows窗体?
我有一个Windows窗体应用程序,其中包括窗体类(及其设计器类)和静态类。我希望能够通过从静态类调用form类中的方法来隐藏表单 隐藏方法如下所示:C# 如何在静态上下文中隐藏Windows窗体?,c#,winforms,static-methods,C#,Winforms,Static Methods,我有一个Windows窗体应用程序,其中包括窗体类(及其设计器类)和静态类。我希望能够通过从静态类调用form类中的方法来隐藏表单 隐藏方法如下所示: internal static void HideController() { DialogResult dlgResult = MessageBox.Show("Controller will now close.", "Closing...",
internal static void HideController()
{
DialogResult dlgResult =
MessageBox.Show("Controller will now close.", "Closing...",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
if (dlgResult == DialogResult.OK)
{
this.Hide();
}
}
表单不是静态的,因此我一直遇到“this”在静态上下文中无效的问题。我想这样调用该方法:
static UtilScenario()
{
_stkProgramId = ConfigurationManager.AppSettings.Get("stkProgramId");
if (CheckIfLaunched())
{
InitAllFields();
}
else
{
frmUavController.HideController();
}
}
我该怎么办?您可以使用static属性获取对表单的引用。您必须将其强制转换为frmUavController,以便调用HideController方法(在移除静态修改器之后)
尝试以下方法。创建一个属性
public static Form frm { get; set; }
static void UtilScenario()
{
HideController();
}
internal static void HideController()
{
if (frm == null)
return;
DialogResult dlgResult = MessageBox.Show("Controller will now close.", "Closing...",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
if (dlgResult == DialogResult.OK)
{
frm.Hide();
}
}
你可以这样称呼它:
public void button2_Click(object sender, EventArgs e)
{
Form1.frm = this;
Form1.HideController();
}
从HideController方法中删除静态修饰符,然后您就可以使用
this
关键字了。@Josh Einstein,是的,但是如何静态调用该方法?我想引用已经实例化的表单对象。从您的示例来看,它不像是静态调用的。无论如何,如果可能的话,避免使用作用于某个实例的静态方法。如果这是不可能的,那么在SO上查找有关“Singleton”设计模式的信息。HideControl是在静态类中调用的,而不是在form类中调用的。form类不是静态的。我猜他指的是您应该检查form.ActiveForm是否是frmUavController。否则,您可能会在runtime@WolfgarPro它不进行类型检查以确保强制转换有效或有任何错误处理。如果以后添加更多表单,建议立即添加该保护。
public void button2_Click(object sender, EventArgs e)
{
Form1.frm = this;
Form1.HideController();
}