3

在编写涉及未通过 GUI 声明而是在主源文件中声明的控件的事件处理函数时,程序员如何绕过范围限制?

在全局范围内声明此类控件而不是 Form1_Load() 来解决此问题是否“可以接受”?

private void Form1_Load(object sender, EventArgs e)
{
    ComboBox t = new ComboBox();
    Button b = new Button();
    b.OnClick += b_OnClick;
}

private void b_OnClick(object sender, OnClickEventArgs e)
{
    s.Add("Hello s!"); // The object s is a ComboBox control generated in the Designer GUI
    t.Add("Hello t!");
}

// Line 10 is valid.
// Line 11 is invaid because t does not exist in the current scope.  How might one work around this issue?
4

1 回答 1

3

我认为这是可以接受的,如果您查看 form.designer 文件,您会注意到使用设计器创建的所有控件都是全局的。所以我认为你可以在自己的代码中做同样的事情。

但是,我认为在某些情况下您不需要这些控件,否则逻辑要求您直接使用设计器构建它们并避免使用该代码。

当然,您上面的代码缺少一些绝对必要的信息,例如位置、大小、名称和最重要的信息。该Form.Controls.Add(control)声明,但我不知道这是否是由于您的问题的简化。

于 2013-06-22T17:16:47.190 回答