C# 窗体:引发鼠标事件(从子级传递到父级)
C# Forms: Raise mouse event (pass from child to parent)
正在寻找任何解决方案。
我有一个带有多个文本框的用户控件。当放置在窗体上时,只有在用户控件主体上单击时才会触发 MouseDown 和 MouseMove 事件,但在文本框中单击时不会触发。
当文本框 mousedown 事件发生时,是否可以引发用户控件的 mousedown 事件?
或者是否可以将事件从对象传递给它的父对象? (仍然可以点击文本框进行编辑?)
谢谢
在这个例子中,我处理了 TextBoxes MouseDown
事件。从这里,您可以引发持有 TextBox
.
的 UserControl 的 MouseDown
事件
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
OnMouseDown(e); // Goes through as a MouseDown Event from UserControl1
}
}
根据您的要求,这可能对您不起作用,因为当处理 UserControl 的 MouseDown
时,它将通过 UserControl
发起(发件人参数将参考UserControl1.
我也提取了Control
class的OnMouseDown
实现,看看能不能用:
// Extracted using Reflection
// This will not compile as Control.EventMouseDown is a private member
System.Windows.Forms.MouseEventHandler mouseEventHandler = (System.Windows.Forms.MouseEventHandler)this.Events[System.Windows.Forms.Control.EventMouseDown];
if (mouseEventHandler == null)
return;
mouseEventHandler(sender, e);
不幸的是,事件存储在私有成员中,不易访问。
如果您想了解和处理源自文本框的 MouseDown
事件,则必须声明并引发自定义事件。
声明自定义事件
public event EventHandler<MouseEventArgs> TextBoxMouseDownEvent;
从 TextBox_MouseDown
引发自定义事件
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
EventHandler<MouseEventArgs> handler = TextBoxMouseDownEvent;
if (handler != null)
{
handler(sender, e);
}
}
正在寻找任何解决方案。 我有一个带有多个文本框的用户控件。当放置在窗体上时,只有在用户控件主体上单击时才会触发 MouseDown 和 MouseMove 事件,但在文本框中单击时不会触发。 当文本框 mousedown 事件发生时,是否可以引发用户控件的 mousedown 事件? 或者是否可以将事件从对象传递给它的父对象? (仍然可以点击文本框进行编辑?)
谢谢
在这个例子中,我处理了 TextBoxes MouseDown
事件。从这里,您可以引发持有 TextBox
.
MouseDown
事件
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
OnMouseDown(e); // Goes through as a MouseDown Event from UserControl1
}
}
根据您的要求,这可能对您不起作用,因为当处理 UserControl 的 MouseDown
时,它将通过 UserControl
发起(发件人参数将参考UserControl1.
我也提取了Control
class的OnMouseDown
实现,看看能不能用:
// Extracted using Reflection
// This will not compile as Control.EventMouseDown is a private member
System.Windows.Forms.MouseEventHandler mouseEventHandler = (System.Windows.Forms.MouseEventHandler)this.Events[System.Windows.Forms.Control.EventMouseDown];
if (mouseEventHandler == null)
return;
mouseEventHandler(sender, e);
不幸的是,事件存储在私有成员中,不易访问。
如果您想了解和处理源自文本框的 MouseDown
事件,则必须声明并引发自定义事件。
声明自定义事件
public event EventHandler<MouseEventArgs> TextBoxMouseDownEvent;
从 TextBox_MouseDown
引发自定义事件private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
EventHandler<MouseEventArgs> handler = TextBoxMouseDownEvent;
if (handler != null)
{
handler(sender, e);
}
}