【问题标题】:How to show a panel dynamically on mouse enter event?如何在鼠标输入事件上动态显示面板?
【发布时间】:2023-03-06 14:18:01
【问题描述】:

就像在使用 css 的网页中一样,我们可以在鼠标输入或悬停时显示一个 div,就像我想在按钮的鼠标输入事件上显示一个面板一样,但我无法做到这一点。我正在尝试这样。

private void btn2_MouseEnter(object sender, EventArgs e)
    {
        Button btn = (Button)sender;
        btn.BackColor = System.Drawing.Color.MistyRose; //this is executed on mouse enter
        Point locationOnForm = btn.FindForm().PointToClient(
        btn.Parent.PointToScreen(btn.Location));
        Panel pnl = new Panel();
        Label lbl = new Label(); 
        lbl.Text = "anything";
        pnl.Controls.Add(lbl);
        pnl.Location = new Point(locationOnForm.X, locationOnForm.Y);
        pnl.Size = new Size(500, 500);
        pnl.BackColor = Color.SkyBlue;
        pnl.Visible = true;
        pnl.Show();
    }

我不知道如何解决这个问题。我想知道

1) 这是正确的方法还是有其他方法可以做到这一点?

2) 如果没问题,那么我在这里犯了什么错误?

谢谢。

【问题讨论】:

    标签: winforms visual-studio-2010 c#-4.0


    【解决方案1】:

    不要在鼠标进入时创建面板,而是已经创建面板然后显示和隐藏它。

    private void button1_MouseEnter(object sender, EventArgs e)
    {
        panel1.Show();
    }
    

    【讨论】:

      【解决方案2】:

      您必须将面板添加到表单控件

      Form1.Controls.Add(pnl);
      

      如果您打算将面板悬停在按钮上,例如 Web 中的 <div>,则必须调用 BringToFront() 确保面板不会出现在表单上的按钮或其他控件的后面-

      pnl.BringToFront();
      

      与上一个答案一样,最好已经在表单上放置一个面板并将visible 设置为 true 或 false 以及面板位置,否则您最终可能会向表单控件添加多个面板.

      如果你打算只在面板中显示纯文本,使用 Tooltip 控件可能更容易 -

      MSDN - Tooltip Control

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-11
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多