C# 单击了哪个控件?
我的WinForm C应用程序上的MouseEvents有问题。我想让所有鼠标点击我的应用程序。C# 单击了哪个控件?,c#,winforms,C#,Winforms,我的WinForm C应用程序上的MouseEvents有问题。我想让所有鼠标点击我的应用程序。 如何确定单击了哪个控件?(我是初学者C#)如果您正在使用Windows窗体,您有几个选项: ,然后确定单击的组件是否真的成为应用程序的一部分 您可以声明一个基类MyComponent:Control。该组件覆盖MousClick事件,并引发一个关于事实的通知。应用程序中的每个控件都源自该控件,因此每个控件都会通知在其上发生的单击。这就足够了 记录事件并按要求进行处理 只是一些想法 如果您使用的是Wi
如何确定单击了哪个控件?(我是初学者C#)如果您正在使用Windows窗体,您有几个选项:
MyComponent:Control
。该组件覆盖MousClick
事件,并引发一个关于事实的通知。应用程序中的每个控件都源自该控件,因此每个控件都会通知在其上发生的单击。这就足够了
记录事件并按要求进行处理只是一些想法 如果您使用的是Windows窗体,则有几个选项:
MyComponent:Control
。该组件覆盖MousClick
事件,并引发一个关于事实的通知。应用程序中的每个控件都源自该控件,因此每个控件都会通知在其上发生的单击。这就足够了
记录事件并按要求进行处理只是一些想法 您必须将它们连接到同一个事件处理程序。这可以在相关控件的“属性”窗口中完成。您还可以编写自己的函数来遍历控制树,并将函数绑定到它们的每个事件处理程序 可以使用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
参数应始终引用触发事件的控件。话虽如此,我可能只附加单个事件处理程序,除非您需要将多个控件作为一个组来处理
警告:以上代码未经测试。您必须将它们连接到同一个事件处理程序。这可以在相关控件的“属性”窗口中完成。您还可以编写自己的函数来遍历控制树,并将函数绑定到它们的每个事件处理程序
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));
}
可以使用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
参数应始终引用触发事件的控件。话虽如此,我可能只附加单个事件处理程序,除非您需要将多个控件作为一个组来处理
警告:上面的代码未经测试。private void Form1\u Load(对象发送方,事件参数e)
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));
}
{
SetupClickEvents(此);
}
///
///这将遍历容器中的每个控件,并向其添加一个单击处理程序
///
///要为其子容器处理单击的容器
私有void设置ClickEvents(控制容器)
{
foreach(container.Controls中的控件)
{
控件。单击+=手柄单击;
}
}
私有void handleclick(对象发送方,事件参数e)
{
控制=(控制)发送方;
Show(string.Format(“{0}已单击!”,control.Name));
}
私有作废表单1\u加载(对象发送方,事件参数e)
{
SetupClickEvents(此);
}
///
///这将遍历容器中的每个控件,并向其添加一个单击处理程序
///
///要为其子容器处理单击的容器
私有void设置ClickEvents(控制容器)
{
foreach(container.Controls中的控件)
{
控件。单击+=手柄单击;
}
}
私有void handleclick(对象发送方,事件参数e)
{
控制=(控制)发送方;
Show(string.Format(“{0}已单击!”,control.Name));
}
对于第二个问题“如何确定单击了哪个控件?”每个控件都有可以用代码处理的事件
了解控件何时被单击的最简单方法是附加到控件的单击事件,该事件是通过控件的属性完成的。您可能必须单击闪电图标才能查看事件。双击偶数旁边的将创建一个空处理程序
例如,如果您有一个简单的表单,其中有一个按钮将单击事件附加到表单和按钮,则该按钮将告诉您何时有单击。在大多数情况下,按钮点击是最有用的处理方式
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
}
}
对于第二个问题“如何确定单击了哪个控件?”每个控件都有可以用代码处理的事件 了解控件何时被单击的最简单方法是附加到控件的单击事件,该事件是通过控件的属性完成的。您可能必须单击闪电图标才能查看事件。双击偶数旁边的将创建一个空处理程序 例如,如果您有一个简单的表单,其中有一个按钮将单击事件附加到表单和按钮,则该按钮将告诉您何时有单击。在大多数情况下,按钮点击是最有用的处理方式
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
}
}
试试这个:
private void Control_Clicks(object sender, EventArgs e)
{
Control control = (Control)sender; // Sender gives you which control is clicked.
MessageBox.Show(control.Name.ToString());
}
,或可能有帮助
希望有帮助。试试这个:
private void Control_Clicks(object sender, EventArgs e)
{
Control control = (Control)sender; // Sender gives you which control is clicked.
MessageBox.Show(control.Name.ToString());
}
,或可能有帮助
希望有帮助。这真的很简单
在Win表单中的单击事件中,您添加
// Here is a modified version of your code:
private void Form1_Click(object sender, EventArgs e)
{
var control = Form1.ActiveControl;
}
真的很简单
在Win表单中的单击事件中,您添加
// Here is a modified version of your code:
private void Form1_Click(object sender, EventArgs e)
{
var control = Form1.ActiveControl;
}
你试过什么?这取决于事件的关联方式。事件处理程序的
sender
参数将告诉您发送事件的对象(控件)