繰り返しになりますが、私はこの投稿に基づいて動的にボタンを作成していましたが、それに応じて非表示にする必要があります。ボタンを見つけて非表示にするにはどうすればよいですか。私はドラッグアンドドロップして何かをするのに慣れているので、これは私にとって新しいことです。どんな助けでもいただければ幸いです。よろしくお願いします。
6 に答える
前の質問の例を使用して、「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;
var button = (from b in this.Controls.OfType<Button>()
where b.Name == nameOfButton).First();
button.Hide();
コントロールの名前を知っている必要があります。そして、これを使用します:
foreach(Control control in Controls){
if (control.Name == "your control name"){
control.Visible = false;
}
}
たとえば、コントロールがmypanelという名前のパネルにある場合は、「foreach(Control control in mypanel.Controls)
役立つことを願って」と書く必要があります。
動的に作成されたコントロールをに保持すると、Dictionary<string, ControlType>
非常に簡単かつ効率的にそれらを見つけることができます。もちろん、鍵となるのはコントロール名です。
フォームにパネルなどのコンテナが含まれている場合は、再帰検索を実行する必要があります。
void SetVisible(Control c)
{
if (control.Name == "your control name")
control.Visible = false;
foreach(Control control in c.Controls){
SetVisible(control);
}
}
そしてどこかで電話します:
SetVisible(this);
本当に古い質問ですが、私のコントロールがネストされていたため(別のコントロールの子)、受け入れられた答えは機能しませんでした。
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