c# - 显示/隐藏 PictureBox 内的按钮

标签 c# show-hide picturebox mouseenter mouseleave

当我显示/隐藏 PictureBox 内的一些按钮时遇到问题,它们显示/隐藏,但我无法单击它们,如果我禁用 MouseLeave 事件中的隐藏部分,它可以工作,但当我使其隐藏时,它不起作用由于某种我无法理解的原因。

这是代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        PictureBox picB = new PictureBox();
        Button btn1 = new Button();
        Button btn2 = new Button();
        picB.Size = new Size(130, 70);
        btn1.Text = "btn1";
        btn2.Text = "btn2";
        btn1.Hide();
        btn2.Hide();
        picB.Controls.Add(btn1);
        picB.Controls.Add(btn2);
        flp.Controls.Add(picB);
        picB.MouseEnter += picB_MouseEnter;
        picB.MouseLeave += picB_MouseLeave;
        btn1.MouseClick += btn1_MouseClick;
        btn2.MouseClick += btn2_MouseClick;
    }

    private void picB_MouseEnter(object sender, EventArgs e)
    {
        PictureBox pb = (PictureBox)sender;
        Button bt1 = (Button)pb.Controls[0];
        Button bt2 = (Button)pb.Controls[1];
        bt1.Show();
        bt2.Show();
    }

    private void picB_MouseLeave(object sender, EventArgs e)
    {
        PictureBox pb = (PictureBox)sender;
        Button bt1 = (Button)pb.Controls[0];
        Button bt2 = (Button)pb.Controls[1];
        bt1.Hide();
        bt2.Hide();
    }

    private void btn1_MouseClick(object sender, EventArgs e)
    {
        MessageBox.Show("Button 1 pressed.");
    }

    private void btn2_MouseClick(object sender, EventArgs e)
    {
        MessageBox.Show("Button 2 pressed.");
    }

最佳答案

您可以简单地测试鼠标是否同时打开/关闭PictureBox 您的按钮:

private void picB_MouseLeave(object sender, EventArgs e)
{
    PictureBox pb = (PictureBox)sender;
    Button bt1 = (Button)pb.Controls[0];
    Button bt2 = (Button)pb.Controls[1];

    Point p = Control.MousePosition;
    if (bt1.ClientRectangle.Contains(bt1.PointToClient(p))  ||
        bt2.ClientRectangle.Contains(bt2.PointToClient(p))) return;

    bt1.Hide();
    bt2.Hide();
}

关于c# - 显示/隐藏 PictureBox 内的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139698/

相关文章:

c# - 另一个图片框上方的透明图片框不起作用。如何解决这个问题?

c# 如何将 pictureBox.Image 转换为字节数组?

c# - 反序列化 System.Collections.ArrayList 类型的对象 - AppFabric 缓存错误

C# WPF 在 Stackpanel 中以编程方式创建的 DataTemplate Dockpanel 无效

c# - OOD 使用 IoC 容器 - 如何构造依赖对象?

css - 如何使用 CSS 中的自定义样式滚动条模仿 OS X 滚动条行为

css - 根据用户在 Drupal 8 中的角色显示/隐藏导航项

c# - Windows 窗体线程到底发生了什么?

javascript - 设置 DIV 的高度以与所述 DIV 内的 anchor 位置相对应

c# - 如何从对话框更改 Form 1 中的内容?