2017-04-27 9 views
0

私はWinFormsアプリケーションを作成しています。このアプリケーションでは、私は動的なLabel,PictureBoxTextBoxコントロールを生成します。C# - 親が設定されていても、ダイナミックラベルが透明でないのはなぜですか?

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.TextPictureBox上に表示することにしたいです。このため、PictureBoxLabelの親とし、Label.BackColorを透明と設定しています。しかしLabelがちょうどPictureBox後ろに消え...

誰もがこれを解決するか、PictureBoxの前にテキストを示す別の可能性に私にヒントを与えることができる方法の手掛かりを持っていますか?

ありがとうございます。

+0

コントロールの[z-order](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()を使用しました。最後の行のいずれかに表示されています。 子インデックスを設定すると、ピクチャボックスの前にラベルが表示されますが、透明にはなりません。 – electrogandalf

答えて

2

私が見る問題はここにある:

lbl_Tile.Location = pb_Tile.Location; 

Locationプロパティのドキュメント:

は大文字に制御相対の左上隅の座標を取得または設定しますそのコンテナの左隅に。あなたのケースでは

pb_Tileのでまた、あなたはこの行を削除する必要がありますが

lbl_Tile.Location = new Point(0, 0); 

のようなものを使用する必要があります任意の場所をachiveするために、lbl_Tileコンテナある

gb_gridBox.Controls.Add(lbl_Tile); 

はラベルのParentを変更するためです。 parent.Controls.Add(child)child.Parent = parentは同じものです。

+0

グッドキャッチ、私はそれに気付かなかった – Pikoh

+0

'新しいポイント(0、0);'私のラベルは 'gb_gridBox'グループボックスの0,0座標に移動しています: -/groupboxはまだコンテナのように見えます – electrogandalf

+0

あなたは 'lbl_Tile.Parent = pb_Tile;'を実行するので、そうしてはいけません。 'gb_gridBox.Controls.Add(lbl_Tile);'という行は、 'Parent'を再度変更するので、この行を削除してください。 –

関連する問題