鼠标悬停在C#上时获取控件名称C#

时间:2012-10-22 09:00:20

标签: c# windows winforms

我在运行时动态添加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;
    }
  }
}

5 个答案:

答案 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;