【问题标题】:Array of WinForm ElementsWinForm 元素数组
【发布时间】:2018-12-14 19:53:57
【问题描述】:

所以我的程序中确实有一个 WinForm,其中包含一系列,每个 ComboBox 和两个 TextBox。 atm 有 8 行,但这将增加到至少 32 行,因此我想使用 Array 或类似的。我该怎么做?

我目前的工作方法是创建一个新的 TextBoxes/ComboBoxes 数组,我手动分配 WinForm 的指定 Elemt。因此我有一个这样的列表:

tbGU[0] = tbGU1;
tbGO[0] = tbGO1;
cbS[0] = cbS1;

当然,这看起来很糟糕,如果多次复制它就不是很好了。有人能解决我的问题吗?

我需要访问 ComboBox 的 SelectedIndex 和 TextBoxes 的 Text。 我希望我可以避免通过代码手动创建所有元素。

【问题讨论】:

  • 您是否考虑过将三个控件(ComboBox、2xTextBox)放入自定义控件中。届时您将需要处理 1/3 的控件总数
  • 有没有考虑过使用DataGridView控件,在这里可以动态创建多个控件?
  • 您可以随时使用List<T> 并一次性初始化:List<ComboBox> cBoxes = new List<ComboBox>() {cbS1, cbS12, cbS3...}; 您可以像访问数组一样访问它。
  • 如下所述,它们不能以均匀分布的方式分布,因为它们位于图形周围/上,因此 DataGridView 对我的应用程序来说不是“可接受的”。将通过使用 List 或 new[](喜欢后者)来使用缩短的 Versionen。

标签: c# arrays winforms combobox textbox


【解决方案1】:

一个简单的解决方案是使用数组初始化语法:

ComboBox[] cbS = new[] { cbS1, cbS2, cbS3 ... };

另一种方法是完全删除变量cbS1、cbS2 ... cBSn,并在for循环中创建控件。

ComboxBox[] cbS = new ComboBox[32];
// declare the text box arrays here as well
for (int i = 0 ; i < cbS.Length ; i++) {
    cbS[i] = new ComboBox();
    cbS[i].Location = ... // use "i" to help you position the control
    // configure your combo box ...
    this.Controls.Add(cbS[i]);

    // do the same for the text boxes.
}

第三种方法是创建自定义控件:

// name this properly!
public class MyControl: UserControl {
    public ComboBox CbS { get; }
    public TextBox TbGU { get; }
    public TextBox TbGO { get; }

    public MyControl() {
        // create and configure the combo box and text boxes here ...
    }
}

然后您可以使用 for 循环创建大量 MyControls。

【讨论】:

  • 不幸的是,它们并没有均匀地分布在我的框架上(例如,使用一种类似于 java 的自制 CardLayout ,即使在那里它们也是根据图形设置的,所以没有“规则“如何设置元素。可能会坚持我的方法,但将其更改为您的较短版本。
  • @Martin 但是组合框和文本框是相互对应的吧?如果它们是相关的,那么您应该创建一个自定义控件。
  • 好吧,也许你的权利,我应该使用它们,我正在考虑使用它。为了澄清,我确实在组合框中选择了一个传感器,我必须为它设置两个临界值(用于进一步的过程)您还选择使用元素索引标记的传感器的位置(这是一个相当复杂的测量系统我必须用应用程序控制,因此!> 32 个传感器 xD)。虽然我已经很高兴我至少能够将 96 行(最少)减少到 3 行(非常庞大)。谢谢你
猜你喜欢
  • 2010-09-05
  • 2019-01-25
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2020-03-02
  • 2020-03-16
相关资源
最近更新 更多