【问题标题】:Passing form as parameter when creating new form创建新表单时将表单作为参数传递
【发布时间】:2011-03-18 11:17:11
【问题描述】:

我有一个 MainForm,它是 MDI 容器。在 MainForm 中,我创建了 2 个新表单,它们在 buttonclick 上打开 - Form1 和 Form2。还有第三种形式 - CommonFom,我应该可以从 Form1 和 Form2 中打开它(在 buttonclick 上)。如果我在 Form1&2 之间切换,我需要 3rd Form 来保存信息,所以我不能从 Form1&2 创建它的新实例。 我试图在 MainForm 中做这样的事情:

CommonForm CF = new CommonForm();
Form1 x = new Form1(CF);
Form2 y = new Form2(CF);

之后,在 Form1 和 Form2 中:

public MainForm(CommonForm theCF)
        {
            InitializeComponent();
        }

...按钮点击的某处

CF.show();

但它在 Form1 中显示错误,而不是没有对象 CF 的实例(在 CF.Show() 行中) 那么我该如何正确地做到这一点呢?

【问题讨论】:

  • 本来打算建议使用 My.Forms 应用程序框架,它可以出色地处理常见表单,但 C# 似乎不支持!
  • 很不清楚。为什么不将 theCF 参数值存储在构造函数中? Show() 调用的位置究竟在哪里?改进你的 sn-ps。

标签: c# winforms parameters


【解决方案1】:

在Form1和Form2开头声明。 (由于代码中缺少它,我不确定是编译错误还是运行时错误)

private Form CF; //The reason I've declared the type as Form is to have flexibility of having any form to show.

像这样修改Form1和Form2的每个构造函数。

public MainForm(CommonForm theCF)     
{   
    this.CF = theCF; 
    InitializeComponent();        
}

它应该可以解决您的问题。

【讨论】:

  • 现在我有这个错误 - 错误 1 ​​字段初始值设定项无法引用非静态字段、方法或属性 'mhmm.MainForm.CF' 这在 Form1 x = new Form1(CF) 中;
  • 使用this.CF 而不是'mhmm.MainForm.CF
  • 对不起,我不明白。我没有在任何地方使用 mhmm.MainForm.CF。那只是错误代码。字段初始值设定项不能引用非静态字段、方法或属性“mhmm.MainForm.CF”
【解决方案2】:

CommonForm 用作单例:即在CommonForm 类中提供CommonForm 类型的static 属性Instance,将其实例化为CommonForm 构造函数。然后,您可以使用CommonForm.Instance 随时​​随地访问CommonForm。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2018-02-26
    • 2014-04-13
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多