2

我在运行时动态添加组合框,如下所示。我遇到的问题是我不知道用户正在使用哪个组合框。

例如。用户决定在表单中添加 5 个组合框,然后转到第一个组合框,并选择一个值,我需要检索该组合框的值。

下面的代码在做什么 - 我的方法

我正在向 FlowlayoutPanel 添加一个组合框,并根据鼠标坐标检索它的名称......顺便说一句,这不起作用......我不知道该怎么做。

任何帮助是极大的赞赏。

public partial class Form1 : Form
{
    int count = 0;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        count += 1;

        ComboBox cb = new ComboBox();
        cb.Name = count.ToString();
        cb.MouseHover += new EventHandler(doStuff);

        Label lb = new Label();
        lb.Text = count.ToString();

        flowLayoutPanel1.Controls.Add(cb);
        flowLayoutPanel1.Controls.Add(lb);
    }

    public void doStuff(object sender, EventArgs e)
    {
        label1.Text = flowLayoutPanel1.GetChildAtPoint(Cursor.Position).Name;
    }
  }
}
4

5 回答 5

1

在 doStuff-eventhandler 中引发事件的组合框位于 sender-parameter 中。尝试将其转换为一个复选框,如下所示:

ComboBox boxThatRaisedTheEvent = (ComboBox)sender;

于 2012-10-22T09:10:43.263 回答
1
string text = ((ComboBox)this.GetChildAtPoint(pt)).Text;
于 2012-10-22T09:11:37.753 回答
1
public void DoStuff(object sender, EventArgs e)
{
    var comboBox = sender as ComboBox;
    var name = (comboBox != null ? comboBox.Name : null);
}

此代码将“sender”参数转换为 ComboBox 对象,如果转换正确完成,则将 ComboBox 名称分配给字符串“name”,否则“name”为空。

提示:C# 编码风格建议方法名称应以大写字母开头。

于 2012-10-22T09:13:22.483 回答
1

你可以试试:

cb.SelectionChangeCommitted += selectionChangedHandler

...

void selectionChangedHandler(object sender, EventArgs e) {
  ComboBox cb = (ComboBox)sender;
  label1.Text = cb.Name;
  // Do whatever else is needed with the combo box
}

SelectionChangeCommitted 事件仅在用户更改组合框选择时引发” ,这听起来像是您所追求的。

于 2012-10-22T09:13:38.130 回答
1

您可以尝试以下方法:

flowLayoutPanel1.Controls.OfType<ComboBox>().FirstOrDefault(cb => cb.Name.Equals(NAME_OF_COMBOBOX))

或更好:

ComboBox box = (ComboBox)sender;
于 2012-10-22T09:21:40.640 回答