C# 可见性更改后,单击另一个按钮上某个按钮的事件

C# 可见性更改后,单击另一个按钮上某个按钮的事件,c#,C#,我正在用C#开发一个windows窗体应用程序。我有一个大按钮“MainButton”,它有一个背景图像来反映它的主要功能。在这个主按钮中,我还包括了另外3个小按钮,我把它们命名为“CreatButton”、“UpdateButton”和“DisplayButton” 当用户在大按钮内移动鼠标时,我会显示所有小按钮,否则当鼠标离开大按钮时,我会隐藏小按钮。请参阅下面的代码 我的问题是,当用户在大按钮内移动鼠标时,小按钮的单击事件不起作用。 注意:我也尝试过用图片框替换大按钮,但不幸的是,效果不太

我正在用C#开发一个windows窗体应用程序。我有一个大按钮“MainButton”,它有一个背景图像来反映它的主要功能。在这个主按钮中,我还包括了另外3个小按钮,我把它们命名为“CreatButton”、“UpdateButton”和“DisplayButton”

当用户在大按钮内移动鼠标时,我会显示所有小按钮,否则当鼠标离开大按钮时,我会隐藏小按钮。请参阅下面的代码

我的问题是,当用户在大按钮内移动鼠标时,小按钮的单击事件不起作用。

注意:我也尝试过用图片框替换大按钮,但不幸的是,效果不太好。

非常感谢您的帮助

  private void MainButton_MouseEnter(object sender, EventArgs e)
    {
        CreateButton.Visible = true;
        UpdateButton.Visible = true;
        DisplayButton.Visible = true;
    }

    private void MainButton_MouseLeave(object sender, EventArgs e)
    {
        CreateButton.Visible = false;
        UpdateButton.Visible = false;
        DisplayButton.Visible = false;           
    }

    private void CreateButton_Click(object sender, EventArgs e)
    {
            // do something ..
    }

    private void UpdateButton_Click(object sender, EventArgs e)
    {
           // do something ..
    }

    private void DisplayButton_Click(object sender, EventArgs e)
    {
          // do something ..
    }

可以使用具有图像背景的面板控件。请记住,如果在面板控件上使用
鼠标离开
,则当您将鼠标悬停在按钮上方时,面板的
鼠标离开
事件将被触发,按钮将闪烁,您将无法执行任何操作

你可以通过在鼠标指针下确定控件而不做任何事情来克服这个问题,如果它是你的一个按钮

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern IntPtr WindowFromPoint(Point pnt);

    private void panel1_MouseLeave(object sender, EventArgs e)
    {
        IntPtr hWnd = WindowFromPoint(Control.MousePosition);
        if(hWnd !=IntPtr.Zero)
        {
            Control control = Control.FromChildHandle(hWnd);
            if (control != null)
            {
                if(control==buttonOne || control==buttonTwo || control==buttonThree )
                    return;
            }
        }

        this.buttonOne.Visible = false;
        this.buttonTwo.Visible = false;
        this.buttonThree.Visible = false;
    }

    private void panel1_MouseEnter(object sender, EventArgs e)
    {
        this.buttonOne.Visible = true;
        this.buttonTwo.Visible = true;
        this.buttonThree.Visible = true;
    }

    private void button_Click(object sender, EventArgs e)
    {
        Control control=(Control)sender;
        MessageBox.Show(control.Text);
    }

谢谢Charlie,这真的解决了问题,但面板上还有一件事,三个按钮一个接一个慢慢消失了。我想知道是否有办法让它们一起更快地消失。再次感谢。我没有在我所做的代码中看到这一点。在休假期间,您还做了其他事情吗?你能把你的密码贴出来,我来看看吗