2017-04-27 37 views
0

我正在寫一個WinForms應用程序。在這個應用程序中,我生成動態的Label,PictureBoxTextBox控件。C# - 即使設置了父級,爲什麼我的動態標籤不透明?

隨着將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前文的另一種可能性?

在此先感謝。

+0

您是否嘗試調整控件的[z順序](https://msdn.microsoft.com/en-us/library/wh9zw57z(v = vs.110).aspx)?例如。 'lbl_Tile.BringToFront();' –

+0

你有沒有試過設置'gb_gridBox.Controls.SetChildIndex(lbl_tile,0);'? – Pikoh

+0

謝謝! 是的,我使用BringToFront(),你可以在最後一行看到。 並設置子索引將標籤放在PictureBox前面,但它不會變成透明。 – electrogandalf

回答

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做一個相同的。

+0

好,我沒注意到 – Pikoh

+0

帶有'new Point(0,0);'我的標籤移動到'gb_gridBox' Groupbox的0,0座標: - /所以groupbox仍然是容器 – electrogandalf

+0

它不應該,因爲你做'lbl_Tile.Parent = pb_Tile;'。糟糕,你應該刪除這行'gb_gridBox.Controls.Add(lbl_Tile);'因爲它再次改變了'Parent'。 –

相關問題