我的WinForm C#应用程序上的MouseEvents存在问题。我希望鼠标点击我的应用程序。 如何确定点击了哪个控件?(我是初学C#)
答案 0 :(得分:5)
试试这个:
private void Control_Clicks(object sender, EventArgs e)
{
Control control = (Control)sender; // Sender gives you which control is clicked.
MessageBox.Show(control.Name.ToString());
}
希望它有所帮助。
答案 1 :(得分:1)
private void Form1_Load(object sender, EventArgs e)
{
SetupClickEvents(this);
}
/// <summary>
/// This will loop through each control within the container and add a click handler to it
/// </summary>
/// <param name="container">The container whose children to handle clicks for</param>
private void SetupClickEvents(Control container)
{
foreach(Control control in container.Controls)
{
control.Click += HandleClicks;
}
}
private void HandleClicks(object sender, EventArgs e)
{
Control control = (Control)sender;
MessageBox.Show(string.Format("{0} was clicked!", control.Name));
}
答案 2 :(得分:0)
如果您正在使用Windows窗体,则有几种选择:
Hook mouse event,并确定点击的组件是否真正成为您的应用程序的一部分
您可以声明基类MyComponent : Control
。该组件会覆盖MousClick
事件并提出special event通知事实。您应用中的每个控件都来自该控件,因此每个控件都会通知其上发生的点击。这足以订阅
他们按照要求处理事件并处理它们。
只是几个想法......
答案 3 :(得分:0)
您必须将它们连接到同一个事件处理程序。这可以在相关控件的属性窗口中完成。您还可以编写自己的函数来遍历控制树,并将函数绑定到每个事件处理程序。
您可以使用foreach循环递归遍历Form.Controls集合。
void attachGlobalHandler(Control aToParse, EventHandler aGlobalHandler)
{
foreach(Control lControl in aToParse.Controls)
{
attachGlobalHandler(lControl, aGlobalHandler);
lControl.Click += aGlobalHandler;
}
}
然后你在表单上调用它,并使用你要调用的函数的名称:
attachGlobalHandler( Form1, myClickHandler );
这应该将它绑定到表单上的每个可点击控件。然后,处理程序的sender
参数应始终引用触发事件的控件。话虽这么说,我可能只是附加单独的事件处理程序,除非你需要将多个控件作为一个组来处理。
警告:上述代码未经测试。
答案 4 :(得分:0)
第二个问题是“如何确定点击了哪个控件?”每个控件都有可以用代码处理的事件。
知道何时单击控件的最简单方法是附加到控件的单击事件,该事件是从控件的属性完成的。您可能必须单击闪电图标才能查看事件。双击偶数旁边将创建一个空的处理程序。
例如,如果您有一个带有单个按钮的简单表单,则将单击事件附加到表单和按钮将告诉您何时在任何地方发生单击。在大多数情况下,按钮单击将是最有用的。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
}
}
答案 5 :(得分:0)
这很简单!
在Win-Form中的点击事件中,添加
// Here is a modified version of your code:
private void Form1_Click(object sender, EventArgs e)
{
var control = Form1.ActiveControl;
}