C# - 即使设置了父标签,为什么我的动态标签不透明?

时间:2017-04-27 10:04:31

标签: c# .net winforms dynamic controls

我正在编写一个WinForms应用程序。在此应用程序中,我生成了动态LabelPictureBoxTextBox控件。

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设置为LabelLabel.BackColor的父设置为透明的原因。但是Label只是消失在PictureBox ...

之后

有没有人知道如何解决这个问题,或者可以给我一个暗示另一种在PictureBox前面显示文字的可能性?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我看到的问题是:

lbl_Tile.Location = pb_Tile.Location;

Location属性的文档:

  

获取或设置控件左上角相对于其容器左上角的坐标

在您的情况下,pb_Tilelbl_Tile容器,因此要获得所需的位置,您应该使用类似

的内容
lbl_Tile.Location = new Point(0, 0);

你也应该删除这一行

gb_gridBox.Controls.Add(lbl_Tile);

因为它会更改标签的Parentparent.Controls.Add(child)child.Parent = parent做同一个。