【问题标题】:.NET controls and scope.NET 控件和范围
【发布时间】:2013-06-22 17:11:06
【问题描述】:

在编写涉及未通过 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?

【问题讨论】:

  • 这很好,因为对控件的引用已添加到表单的Controls,但是要引用其中一个控件,除了在其中查找之外别无他法您表单的Controls。这不是很方便。

标签: c# .net winforms scope controls


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2016-05-26
    相关资源
    最近更新 更多