我正在编写一个WinForms应用程序。在此应用程序中,我生成了动态Label
,PictureBox
和TextBox
控件。
将Image
拖放到PictureBox
中,即可打开添加的TextBox
。输入一些文本并按“Enter”键将触发以下方法。
private void tb_Tile_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
TextBox tb_Tile = sender as TextBox;
Tile tb_Tag = tb_Tile.Tag as Tile;
//add function that overgives the given name to the matrix i.e. GiveNameToMatrix()
tb_Tile.Visible = false;
Label lbl_Tile = Controls.Find("Label" + tb_Tag.X + tb_Tag.Y, true).FirstOrDefault() as Label;
lbl_Tile.Visible = true;
//find picture box by tag or sth and then make this pB the parent
PictureBox pb_Tile = (PictureBox)gb_gridBox.Controls["Tile" + tb_Tag.X + tb_Tag.Y];
pb_Tile.BackgroundImage = pb_Tile.Image;
lbl_Tile.Parent = pb_Tile;
// pb_Tile.Visible = false;
if (pb_Tile.HasChildren)
{
lbl_Tile.Text = tb_Tile.Text; //parent has to be set to PictureBox
lbl_Tile.Visible = true;
lbl_Tile.ForeColor = Color.Black;
lbl_Tile.BackColor = Color.Transparent;
lbl_Tile.Location = pb_Tile.Location;
lbl_Tile.Refresh();
pb_Tile.Refresh();
gb_gridBox.Controls.Add(lbl_Tile);
lbl_Tile.BringToFront();
}
}
}
我希望Label.Text
上显示PictureBox
。这就是我将PictureBox
设置为Label
和Label.BackColor
的父设置为透明的原因。但是Label
只是消失在PictureBox
...
有没有人知道如何解决这个问题,或者可以给我一个暗示另一种在PictureBox
前面显示文字的可能性?
提前致谢。
答案 0 :(得分:2)
我看到的问题是:
lbl_Tile.Location = pb_Tile.Location;
Location属性的文档:
获取或设置控件左上角相对于其容器左上角的坐标。
在您的情况下,pb_Tile
是lbl_Tile
的容器,因此要获得所需的位置,您应该使用类似
lbl_Tile.Location = new Point(0, 0);
你也应该删除这一行
gb_gridBox.Controls.Add(lbl_Tile);
因为它会更改标签的Parent
。 parent.Controls.Add(child)
和child.Parent = parent
做同一个。