如何在鼠标输入事件中动态显示面板?
问题描述:
像在使用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)如果这是好的,那么我在这里做的错误是什么?
谢谢。
答
您必须将面板添加到窗体控件
Form1.Controls.Add(pnl);
如果计划有超过就像网络一<div>
按钮面板悬停,你将不得不调用 BringToFront()
保证面板不出现在表格上的按钮或其他控件后面 -
pnl.BringToFront();
也像上一个答案,它可能是最好在表单上放置一个面板,并将visible
设置为true或false以及面板位置,否则最终可能会将多个面板添加到表单控件。
如果你打算只是显示在面板纯文本,它可能是更容易使用工具提示控制 -
答
不要在鼠标输入上创建面板,而是要创建面板然后只显示和隐藏它。
private void button1_MouseEnter(object sender, EventArgs e)
{
panel1.Show();
}