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调用事件MouseEnter?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

触发Mouseenter事件

来自分类Dev

触发Mouseenter事件

来自分类Dev

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

来自分类Dev

动态处理UserControl事件

来自分类Dev

动态处理UserControl事件

来自分类Dev

RichTextBox的MouseEnter事件处理程序

来自分类Dev

jQuery mouseenter事件未执行

来自分类Dev

在mouseenter上隐藏div-但请保留

来自分类Dev

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

来自分类Dev

自定义UserControl事件

来自分类Dev

在UserControl类中引发事件

来自分类Dev

UserControl中的TextBox MouseDown事件

来自分类Dev

WPF UserControl 通用单击事件

来自分类Dev

引发 UserControl 的默认 Click 事件

来自分类Dev

链接标签到UserControl页面

来自分类Dev

关于背景svg元素的mouseenter事件

来自分类Dev

mouseenter mouseleave事件有冲突吗?jQuery的

来自分类Dev

拖动html元素时检测mouseenter事件

来自分类Dev

MouseEnter和MouseLeave事件似乎很慢

来自分类Dev

Mouseover / Mouseenter事件超出元素范围

来自分类Dev

绝对定位元素上的 Mouseenter 事件

来自分类Dev

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

来自分类Dev

将 mouseenter 事件更改为定时事件

来自分类Dev

隐藏/显示 div 事件

来自分类Dev

如何隐藏optgroup标签?