我在运行时动态添加ComboBox,如下所示。 我遇到的问题是我不知道用户正在使用哪个组合框。
例如。用户决定向表单添加5个组合框,然后转到第一个组合框,并选择一个值,我需要检索该组合框的值。
以下代码正在做什么 - 我的方法
我正在向FlowlayoutPanel添加一个comboBox,并根据鼠标坐标检索它的名称....顺便说一句,这样做不行......我不知道该怎么办。
非常感谢任何帮助。
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;
}
}
}
答案 0 :(得分:1)
在doStuff-eventhandler中引发事件的组合框位于sender-parameter中。尝试将其转换为一个复选框,如下所示:
ComboBox boxThatRaisedTheEvent = (ComboBox)sender;
答案 1 :(得分:1)
string text = ((ComboBox)this.GetChildAtPoint(pt)).Text;
答案 2 :(得分: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'为null。
提示:C#编码样式表明方法名称应以大写字母开头。
答案 3 :(得分: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 event才会“”,这听起来就像你所追求的那样。
答案 4 :(得分:1)
您可以尝试以下内容:
flowLayoutPanel1.Controls.OfType<ComboBox>().FirstOrDefault(cb => cb.Name.Equals(NAME_OF_COMBOBOX))
或更好:
ComboBox box = (ComboBox)sender;