フォーム上の一連のコントロールを読み取り専用に設定し、ボタンをクリックして元に戻せるようにしたいと考えています。それらをループする方法はありますか?this.Controls
多分......
ありがとう!
すべてのコントロールを読み取り専用に設定する場合は、次のようにします。
foreach(Control currentControl in this.Controls)
{
currentControl.Enabled = false;
}
本当にやりたいことがコントロールの一部を読み取り専用に設定する場合は、関連するコントロールのリストを保持し、すべてではなく、そのリストで ForEach を実行することをお勧めします。
それらを有効/無効に設定するのは簡単です。GWLIosa'a answer を参照してください。
ただし、すべてのコントロールに読み取り専用プロパティがあるわけではありません。次のようなものを使用できます。
foreach (Control c in this.Controls)
{
if (c is TextBox)
(c as TextBox).Readonly = newValue;
else if (c is ListBox)
(c as ListBox).Readonly = newValue;
// etc
}
個人的には、影響を与えたいすべてのコントロール (およびサブコントロール) を に入れPanel
、単一の の状態を変更するだけPanel
です。これは、古い値の保存を開始する必要がないことを意味します (それらを元に戻すために - たとえば、それらがすべて有効になっていると想定したくない場合があります)。
GWLlosa によって提案された Enabled プロパティを使用することをお勧めしますが、ReadOnly プロパティを使用したい、または使用する必要がある場合は、これを試してください。
foreach (Control ctrl in this.Controls)
{
Type t = ctrl.GetType();
PropertyInfo propInfo = t.GetProperty("ReadOnly");
if (propInfo != null)
propInfo.SetValue(ctrl, true, null);
}