当我制作 pictureBox1.Controls.Add(label1) label1 时
消失了,我尝试带到前面并改变颜色,但不能
做吧。如果您有任何想法,请告诉我我提供的代码
对我来说是可以理解的。再次感谢大家:)
您可能会在表单的 Load() 事件中使用这样的代码:
private void Form1_Load(object sender, EventArgs e)
{
Point pt = CardName.Parent.PointToScreen(CardName.Location);
Card.Controls.Add(CardName);
CardName.Location = Card.PointToClient(pt);
}
这使标签保持在与原来相同的位置,但使图片框成为父级。
不知道你哪里出错了。这是一个展示其实际效果的示例。 PictureBox (Card) 和 Label (CardName) 均位于面板 (panel1) 内。单击按钮 2 可切换卡片的可见性。单击button1 使Card 成为CardName 的父级。您可以看到,一开始,只有 Card 切换可见性,但在单击 button1 并设置 Parent 后,两者一起切换可见性,因为 CardName 是 Card 的子级(它还会更改其 BackColor 以匹配其新 Parent 的 BackColor):
Code:
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
Point pt = CardName.Parent.PointToScreen(CardName.Location);
Card.Controls.Add(CardName);
CardName.Location = Card.PointToClient(pt);
}
private void button2_Click(object sender, EventArgs e)
{
Card.Visible = !Card.Visible;
}
}
当我将鼠标移到标签上时,面板认为鼠标离开了它并上升
鼠标离开事件
下面是如何判断光标是否确实离开了面板的边界,而不是简单地在面板中输入子控件:
private void panel1_MouseEnter(object sender, EventArgs e)
{
panel1.BackColor = Color.Red;
}
private void panel1_MouseLeave(object sender, EventArgs e)
{
Point pt = panel1.PointToClient(Cursor.Position);
if (!panel1.ClientRectangle.Contains(pt))
{
// we only get in here when the cursor leaves the BOUNDS of panel1
panel1.BackColor = Control.DefaultBackColor;
}
}