UserControl的标签隐藏了MouseEnter事件

塔蒂亚娜M

由于标签在顶部,因此我无法激活事件鼠标的输入。我尝试分配相同的事件,但是当我调用MyUserControl myUserControl =(MyUserControl)sender时;导致错误。这是我的代码:

foreach (Control ctrl in MyUserControl.Controls)
{
     ctrl.MouseEnter += MyUserControl_MouseEnter;
}    

private void MyUserControl_MouseEnter(object sender, EventArgs e)
{
   MyUserControl myUC = (MyUserControl)sender;
   int test = myUC .Codigo;
}

事件(Form_MouseEnter)在表单中发生时起作用,但在组件中它返回诸如'System.InvalidCastException'的错误

public partial class MyUserControl : UserControl
{
    int g_intCodEquip;
    public int Codigo
    {
        set { g_intCodEquip = value; }
        get { return g_intCodEquip; }
    }
}
IV软件

为了确保正确处理MyUserControl的所有子控件,我们可以迭代MyUserControl的控件树并订阅MouseEnter事件。

我们将所有这些事件路由到集中式Any_MouseEnter处理程序,该处理程序又触发Form1订阅的新自定义事件:

public partial class MyUserControl : UserControl
{
    public MyUserControl()
    {
        InitializeComponent();
        IterateControlTree();
    }

    void IterateControlTree(Control control = null)
    {
        if (control == null)
        {
            control = this;
        }
        control.MouseEnter += Any_MouseEnter;
        foreach (Control child in control.Controls)
        {
            IterateControlTree(child);
        }
    }

    private void Any_MouseEnter(object sender, EventArgs e)
    {
        // Before calling Invoke we need to make sure that
        // MyUserControlMouseEnter is not null as would be
        // the case if there are no subscribers to the event.
        // The '?' syntax performs this important check.
        MyUserControlMouseEnter?.Invoke(this, EventArgs.Empty);
    }

    // A custom event that this custom control can fire.
    public event EventHandler MyUserControlMouseEnter;

    public int Codigo
    {
        set
        {
            test = value;
        }
        get
        {
            return test;
        }
    }
    int test = 0;
}

注意:这是您上一篇文章的后续问题,因此我在“ Codigo”属性上进行了复制。

好,现在在主Form1中,我们订阅MyUserControl触发的新事件。现在,发送者类型为MyUserControl强制转换成功,并且无论鼠标进入哪个控件,通知都有效。

private void MyUserControl_MouseEnter(object sender, EventArgs e)
{
    MyUserControl myUserControl = (MyUserControl)sender;
    Debug.WriteLine(
        "MouseEnter Detected: " + myUserControl.Name + 
        " - Value of Codigo is: " + myUserControl.Codigo);
}

作为测试跑步者,我们可以设置4 x 3的MyUserControl数组(工作示例MyUserControl包含一个Label和一个Button)。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    TableLayoutPanel tableLayoutPanel1 = new TableLayoutPanel() { ColumnCount = 4, RowCount = 4, Dock = DockStyle.Fill };
    protected override void OnHandleCreated(EventArgs e)
    {
        base.OnHandleCreated(e);
        Controls.Add(tableLayoutPanel1);
        int row, column;
        for (int count = 0; count < 12; count++)
        {
            row = count / 4; column = count % 4;

            MyUserControl myUserControl = new MyUserControl();
            myUserControl.Name = "MyUserControl_" + count.ToString("D2"); // Name it! (Default is "") 

            // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv  
            // Subscribe to custom event fired by MyUserControl             
            myUserControl.MyUserControlMouseEnter += MyUserControl_MouseEnter;
            // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        

            myUserControl.Codigo = 1000 + count;                         // Example to set Codigo

            tableLayoutPanel1.Controls.Add(myUserControl, column, row);
        }
    }
}

该行为遵循此10秒剪辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动态处理UserControl事件

来自分类Dev

关于背景svg元素的mouseenter事件

来自分类Dev

如何隐藏optgroup标签?

来自分类Dev

触发Mouseenter事件

来自分类Dev

自定义UserControl事件

来自分类Dev

mouseenter mouseleave事件有冲突吗?jQuery的

来自分类Dev

拖动html元素时检测mouseenter事件

来自分类Dev

当光标隐藏在其他HTML元素后面时,如何触发mouseenter事件?

来自分类Dev

MouseEnter和MouseLeave事件似乎很慢

来自分类Dev

在UserControl类中引发事件

来自分类Dev

哪个UserControl调用事件MouseEnter?

来自分类Dev

在mouseenter上隐藏div-但请保留

来自分类Dev

当光标隐藏在其他HTML元素后面时,如何触发mouseenter事件?

来自分类Dev

UserControl中的TextBox MouseDown事件

来自分类Dev

动态处理UserControl事件

来自分类Dev

链接标签到UserControl页面

来自分类Dev

jQuery:为每个mouseEnter事件显示子div的未定义序列,然后将它们全部隐藏

来自分类Dev

触发Mouseenter事件

来自分类Dev

RichTextBox的MouseEnter事件处理程序

来自分类Dev

Mouseover / Mouseenter事件超出元素范围

来自分类Dev

取消隐藏隐藏的标签栏(标签栏)

来自分类Dev

jQuery mouseenter事件未执行

来自分类Dev

显示了div标签,但即使给了hide()事件也没有将其隐藏

来自分类Dev

隐藏/显示 div 事件

来自分类Dev

WPF UserControl 通用单击事件

来自分类Dev

绝对定位元素上的 Mouseenter 事件

来自分类Dev

引发 UserControl 的默认 Click 事件

来自分类Dev

将 mouseenter 事件更改为定时事件

来自分类Dev

为什么此 mouseenter 事件对 <a> 标签内的 <i> 标签不起作用