【问题标题】:accessing dynamically created control variables from event handler c#从事件处理程序 c# 访问动态创建的控制变量
【发布时间】:2012-09-19 13:33:33
【问题描述】:

我有一个正在尝试编写的程序

当您单击表单上的加号按钮时,会动态创建一行组合框和文本框 然后您可以继续单击加号,它会继续添加一行,但会将新行向下移动

我的行是这样组织的:

有一个组合框用于建筑物,然后是一个组合框用于房间。那是一排

建筑物组合框中包含建筑物列表,当我从列表中选择一个项目时,我需要使用与建筑物对应的房间号列表填充房间组合框。

我很难做到这一点。 这是我尝试过的。

我的行类是我用来创建新行的。 当我按下按钮时,会创建一个带有新组合框等的新行。

这是我的事件处理程序

private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
    {

        ComboBox comboBox = sender as ComboBox;
        if (comboBox.SelectedItem.Equals("ATLC"))
        {
            foreach (int x in row.ATLC)
            {
                row.roomComboBox.Items.Add(x);
            }
        }

现在我的问题是我需要以某种方式将相应的房间号数据添加到与当前行关联的 roomComboBox 中,我不知道它是如何让我发疯的。 发件人组合框与当前行相关联,那么有没有办法使用发件人来引用同一行成员的房间组合框? 任何帮助都会很棒。我在这里搜索了很多线程,似乎无法找到答案。

编辑:

有没有办法引用变量所属的对象。 如果我可以以某种方式引用发送者组合框的行对象,那么我可以使用它来引用同一行对象的房间组合框......也许?不知何故?请问?

【问题讨论】:

    标签: c#


    【解决方案1】:

    使用DataRepeater Control for Windows Forms。它包含在 Visual Basic Power Packs 中,但也可用于 C# 项目。

    另一种选择是使用DataGridView

    【讨论】:

      【解决方案2】:

      为每一行创建组合框时,可以将 Building 组合框的 Tag 属性设置为 Room Numbers 组合框。这将让您检索该行的关联组合框。即……

      // create combobox for row N...
      ComboBox cmbBuilding = new ComboBox();
      ComboBox cmbRooms = new ComboBox();
      
      // store rooms combobox in building combobox
      cmbBuilding.Tag = cmbRooms;
      
      // ...
      
      private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
      {
        ComboBox comboBox = sender as ComboBox;
      
        // get the room combobox
        ComboBox cmbRooms = comboBox.Tag as ComboBox;
      
        if (comboBox.SelectedItem.Equals("ATLC"))
        {
          foreach (int x in row.ATLC)
          {
            cmbRooms.Items.Add(x);
          }
        }
      

      【讨论】:

      • 其实我只是想出了另一种方法
      • 有一个类级别的数组来保存新创建的行对象,然后会使用行对象数组的索引来引用行对象中的特定变量
      【解决方案3】:

      希望这个小sn-p会有所帮助

      (sender as ComboBox).Parent.Controls.Find("cmbRooms",true)
      

      此代码将参考 ComboBox 发送方获取 ID 为“cmbRooms”的控件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多