如何在鼠标输入事件中动态显示面板?

时间:2013-04-08 13:15:23

标签: winforms visual-studio-2010 c#-4.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)如果这样可以,那么我在这里做的错误是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

Form1.Controls.Add(pnl);

如果您计划将某个面板悬停在按钮上,就像网页中的<div>一样,则必须致电 BringToFront()确保面板不会出现在按钮或表单上的其他控件后面 -

pnl.BringToFront();

与上一个答案一样,最好在面板上放置一个面板,只需将visible设置为true或false以及面板位置,否则最终可能会向面板添加多个面板表格控制。

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

MSDN - Tooltip Control