修改application.run(form1)创建的表单对象

时间:2012-10-15 14:12:12

标签: c#

我是C#的新手,并试图弄清楚如何从另一个类编辑表单。表单由默认VS方法创建,如下所示:

static void Main()
{
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(new Form1());
}

我在Form1.cs文件中创建了一个方法,就像测试如何更新Form1中的label1字段一样。这是方法:

public void UpdateLabel(string state = "Changed Text")
{
  label1.Text = state;
}

我遇到的问题是Application.Run命令没有提供Form1类型的命名对象。所以,当我想从Program.cs触发UpdateLabel方法时,如下所示:

XXX.UpdateLabel();

我没有要定位的对象来访问表单。如果我手动创建表单,那么我相信这样可以正常工作:

Form1 myForm = new Form1();
myForm.UpdateLabel();

使用Windows窗体应用程序提供的Application.Run(Form1),如何访问正在创建的窗体对象?另外,这是我应该为这类问题采取的方法,还是有更好的方法?

4 个答案:

答案 0 :(得分:2)

嗯,你可以用这种方式整合你的最后一个例子......

static void Main() 
{ 
  Application.EnableVisualStyles(); 
  Application.SetCompatibleTextRenderingDefault(false); 
  Form1 myForm = new Form1();
  myForm.UpdateLabel();
  Application.Run(myForm); 
} 

但是让我问你:为什么你的逻辑要求在Form1构造函数之外执行此操作?

public Form1()
{
    InitializeComponents();
    label1.Text = "Changed Text";
}

编辑:根据以下评论,我认为你应该做这样的事情:

MyApplicationCode appCode;

public Form1()
{
    InitializeComponents();
    appCode = new MyApplicationCode();

    this.Text = appCode.GetFormText();
    label1.Text = appCode.GetLabelText();
    cmdSave.Enabled = appCode.UserHasSavePermission();
    ...... // and so on for other decisions on 

}

答案 1 :(得分:2)

您可以通过以下方式解决问题:

Form1 form = new Form1());

form.UpdateLabel();

Application.Run(form);

至于第二个问题,它实际上取决于你最终要达到的目标。

答案 2 :(得分:1)

因此,您有一些相当复杂的逻辑,用于确定表单中某些控件的初始值。由于该逻辑的复杂性,您更愿意从Form1的定义中提取该代码并将其移至另一个类。到目前为止,这一切都很好。

您可以创建其他类,让Form1 使用该类,并让它为Form1提供值。而不是让其他类具有Form1(这会将您的代码放入MainForm1应该有其他类。

实现这一点非常简单。您创建另一个类,为其提供一个返回字符串的实例或静态方法。 Form1要么调用静态方法,要么创建类的实例并调用实例方法。然后根据该方法的结果设置标签。

答案 3 :(得分:0)

Application.Run通常用于启动WinForms应用程序,直到该应用程序关闭为止。您的Program.cs类的哪些功能应该调用UpdateLabel?您的应用程序是否在外部使用标签值参数启动?