C# c“访问”上的方法;“主要”;表单应用程序中的UserForm

C# c“访问”上的方法;“主要”;表单应用程序中的UserForm,c#,.net,C#,.net,在从VB到c的转换过程中,我有点困惑-我有一个从要点开始的用户表单: static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new AwesomeForm());

在从VB到c的转换过程中,我有点困惑-我有一个从要点开始的用户表单:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new AwesomeForm());
    }
}
在这个表单上,我有一个标签Label1,但我无法从另一个类访问它(
awemomeform.Label1
在intellisense中不存在)-它找不到Label1或者表单中的任何公共方法;我尝试在
AwesomeForm
上使用公共访问器创建一个方法:

    public void UpdateMe(string TheMessage)
    {
        this.Label1.Text = TheMessage;
    }
在VB中,我只需使用表单名称和公共方法(
AwesomeForm.UpdateMe(“Hi!”)

我推测这与
应用程序有关。运行(new AwesomeForm());
创建
AwesomeForm
的实例,我想我可以使用
公共表单MyAwesomeForm=Application.OpenForms[0]访问该实例
给我
MyAwesomeForm
玩,但尽管这行没有出错,我仍然没有intellisense中的方法列表,当我尝试使用
Form.UpdateMe()时,它也不会编译

我尝试为它声明一个变量,
public AwesomeForm MyAwesomeForm=Application.OpenForms[0];
,但没有成功

我哪里做错了?!我怎么能告诉其他地方的一个班级在创业表格中改变一些东西


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

你不能调用
AwesomeForm.UpdateMe()
之所以这样,是因为它不是一个静态函数。您要么将其设置为静态函数,要么最好创建一个AwesomeForm实例并使用以下函数:

AwesomeForm f = new AwesomeForm();
f.UpdateMe("Hi");
在这里也使用它

Application.Run(f);

通过理解Hans的注释和尝试casiosmu的方法,我最终像往常一样从Application.Run()行运行它,并将其转换为另一个静态类:


public static AwesomeForm MAIN\u FORM=(AwesomeForm)Application.OpenForms[0];

C#强制您正确使用面向对象编程,没有vb.net提供的快捷方式。因此,首先,您必须在需要时使用强制转换,语句只能使用
(AwesomeForm)Application.OpenForms[0]进行编译
。大脑移植会带来一段时间的伤害,但这些限制可能也会为编写更好的代码铺平道路。类之间的强耦合总是需要避免的。引发一个AwesomeForm订阅的事件是一种标准技术。依赖项注入框架是解决这一问题的好方法复杂的对象模型。我会读铸造,它似乎总是弹出。我在c#中发现的一件事是,随着我学习的深入,混乱会减少…一旦你克服了那些快捷方式,与VB.Net相比,VB似乎更容易,但它很容易混淆。我也来自Excel中的VBA,所以我认为我有更多的坏习惯在模块/类/用户表单中添加了一些有点奇怪的术语。感谢您的回复,这是否意味着我可以在代码的开头使用
f=new AwesomeForm();
并简单地替换行
Application.Run(new AwesomeForm())是的,您可以使用它,请参阅我的编辑。但是如果我理解正确:您无法删除
应用程序。请运行
,因为它启动表单的主消息循环,这是必不可少的。这是因为
F
只存在于
main()中
。要从另一个DebuggerForm实例访问AwesomeForm实例,您需要将其传递到那里:例如,
AwesomeForm af=new AwesomeForm();DebuggerForm df=new DebuggerForm(af);
。关于投票:如果我的帖子有助于您进行反投票;-)也许您原则上应该阅读OOP,例如:我已经用casting破解了它,因为我需要从Program.cs运行userform作为起点,然后我只是将它设置在为通用应用程序定义保存的静态类中。这是一个风险代码,它希望表单对象在静态构造函数运行之前已经创建。它运行的确切时间是不可知的,您将得到的异常非常难看,难以调试。有一种更糟糕的方法可以做到这一点: