1

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

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

我有这样组织的行:

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

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

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

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

这是我的事件处理程序

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 中,我不知道它是如何让我发疯的。发件人组合框与当前行相关联,那么有没有办法使用发件人来引用同一行成员的房间组合框?任何帮助都会很棒。我在这里搜索了很多线程,似乎无法找到答案。

编辑:

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

4

3 回答 3

1

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

// 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);
    }
  }
于 2012-09-27T17:51:24.730 回答
1

希望这个小片段会有所帮助

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

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

于 2012-09-27T18:00:34.030 回答
0

为 Windows 窗体使用DataRepeater 控件。它包含在 Visual Basic Power Packs 中,但也可用于 C# 项目。

另一种选择是使用DataGridView.

于 2012-09-27T17:44:57.267 回答