0

就像在使用 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)如果这没问题,那么我在这里做的错误是什么?

谢谢。

4

2 回答 2

1

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

private void button1_MouseEnter(object sender, EventArgs e)
{
    panel1.Show();
}
于 2013-04-08T13:25:27.370 回答
0

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

Form1.Controls.Add(pnl);

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

pnl.BringToFront();

也像前面的答案一样,最好在表单上放置一个面板,然后设置visible为 true 或 false 以及面板位置,否则您最终可能会向表单控件添加多个面板。

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

MSDN - 工具提示控件

于 2013-04-08T13:30:11.877 回答