寻找任何解决方案。 我有一个带有几个文本框的用户控件。当放置在窗体上时,仅当在用户控件主体上单击时才会触发MouseDown和MouseMove事件,而在文本框中单击时不会触发。 发生文本框mousedown事件时,是否可以引发用户控件的mousedown事件? 还是可以将事件从对象传递到其父对象? (是否还可以单击文本框进行编辑?)
谢谢
答案 0 :(得分:1)
在此示例中,我已经处理了TextBoxes MouseDown
事件。在这里,您可以引发保存您的MouseDown
的UserControl的TextBox
事件。
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。
我还提取了OnMouseDown
类的Control
实现,以查看是否可以使用它:
// 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);
不幸的是,事件存储在Private成员中,并且不易访问。
如果您想以不同的方式来了解和处理MouseDown
事件(如果它起源于TextBox),则必须声明并引发一个自定义事件。
声明自定义事件
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);
}
}