c# 在窗体应用程序中访问"Main"用户窗体上的方法



在从VB过渡到c#的过程中,我有点困惑 - 我有一个从主要点开始的用户窗体:

static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new AwesomeForm());
}
}

在这个表单上,我有一个标签 Label1,但我无法从另一个类访问它(AwesomeForm.Label1智能感知中不存在( - 它找不到 Label1 或实际上表单中的任何公共方法;我试图用公共访问器在AwesomeForm上制作一种方法:

public void UpdateMe(string TheMessage)
{
this.Label1.Text = TheMessage;
}

在 VB 中,我只需使用表单的名称和公共方法(AwesomeForm.UpdateMe("Hi!")

我收集这与创建AwesomeForm实例Application.Run(new AwesomeForm());有关,我认为我可以通过public Form MyAwesomeForm = Application.OpenForms[0];给我MyAwesomeForm来访问该实例,但是虽然该行没有错误,但我仍然没有得到智能感知中的方法列表,并且当我尝试使用Form.UpdateMe()时它无法编译

我尝试为它声明一个变量,public AwesomeForm MyAwesomeForm = Application.OpenForms[0];但这不起作用......

我哪里做错了?!如何告诉其他地方的班级更改启动表单中的某些内容?

我可以在行Application.Run(new AwesomeForm());的某个地方放一个变量名吗,例如Application.Run(Wow new AwesomeForm(((;然后我就可以得到AwesomeForm的第一个实例吗?

通过理解 Hans 的评论和尝试 casiosmu 的方法的组合,我最终像往常一样从 Application.Run(( 行运行它并将其转换为不同的静态类:

public static AwesomeForm MAIN_FORM = (AwesomeForm)Application.OpenForms[0];

你不能像这样调用AwesomeForm.UpdateMe(),因为它不是一个静态函数。你要么必须让它成为静态的,要么更好地创建一个AwesomeForm的实例并使用它:

AwesomeForm f = new AwesomeForm();
f.UpdateMe("Hi");

并在这里使用它

Application.Run(f);

最新更新