-1

繰り返しになりますが、私はこの投稿に基づいて動的にボタンを作成していましたが、それに応じて非表示にする必要があります。ボタンを見つけて非表示にするにはどうすればよいですか。私はドラッグアンドドロップして何かをするのに慣れているので、これは私にとって新しいことです。どんな助けでもいただければ幸いです。よろしくお願いします。

4

6 に答える 6

2

前の質問の例を使用して、「name」プロパティを追加しました。

int lastX = 0;
for (int i = 0; i < 4; i++) {
  Button b = new Button();
  b.Name = "button" + i.ToString();
  b.Location = new Point(lastX, 0);
  this.Controls.Add(b);
  lastX += b.Width;
}

これで、名前でアクセスできます。

if (this.Controls.ContainsKey("button1"))
  this.Controls["button1"].Visible = false;
于 2012-06-20T18:31:34.613 に答える
1
var button = (from b in this.Controls.OfType<Button>()
              where b.Name == nameOfButton).First();

button.Hide();
于 2012-06-20T18:31:04.557 に答える
0

コントロールの名前を知っている必要があります。そして、これを使用します:

foreach(Control control in Controls){
  if (control.Name == "your control name"){
      control.Visible = false;
  }
}

たとえば、コントロールがmypanelという名前のパネルにある場合は、「foreach(Control control in mypanel.Controls) 役立つことを願って」と書く必要があります。

于 2012-06-20T18:30:34.413 に答える
0

動的に作成されたコントロールをに保持すると、Dictionary<string, ControlType>非常に簡単かつ効率的にそれらを見つけることができます。もちろん、鍵となるのはコントロール名です。

于 2012-06-20T18:31:03.073 に答える
0

フォームにパネルなどのコンテナが含まれている場合は、再帰検索を実行する必要があります。

void SetVisible(Control c)
{
    if (control.Name == "your control name") 
          control.Visible = false; 

    foreach(Control control in c.Controls){       
      SetVisible(control);       
    }

} 

そしてどこかで電話します:

SetVisible(this);
于 2012-06-21T07:48:24.620 に答える
0

本当に古い質問ですが、私のコントロールがネストされていたため(別のコントロールの子)、受け入れられた答えは機能しませんでした。

Controls.Findメソッドは、子を検索するように指示する2番目のパラメーターに「true」を渡すことで機能しました。

        Control c = panelControls.Controls.Find("MyControlName", true).FirstOrDefault();
        if (c != null && c is ComboBox) {
            ComboBox cmb = (ComboBox)c;
            cmb.Hide();
        }

ドキュメント: https ://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.controlcollection.find

于 2021-04-23T20:31:20.330 に答える