从事件处理程序c#访问动态创建的控制变量

时间:2012-09-27 17:27:07

标签: c#

我有一个我想写的程序

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

我的行组织如下:

有一个用于建筑物的组合框,然后是一个用于房间的组合框。这就是一行

建筑组合框中有建筑物清单,当我从列表中选择一个项目时,我需要在房间组合框中填入与建筑物对应的房间编号列表。

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

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

这是我的事件处理程序

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,我不知道如何以及它让我疯狂。 发件人comboBox与当前行相关联,那么是否有一种方法可以使用发送方来引用属于同一行的成员的roomComboBox? 任何帮助都会很棒。我在这里搜索了很多线程,似乎无法找到答案。

编辑:

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

3 个答案:

答案 0 :(得分:1)

为每行创建组合框时,可以将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);
    }
  }

答案 1 :(得分:1)

希望这个小片段有用

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

此代码将获取ID为“cmbRooms”的控件,并引用ComboBox发件人

答案 2 :(得分:0)

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

另一种选择是使用DataGridView