すべてのコントロールは、読み取り専用のWinForm中ボタンクリックに切り替え

StackOverflow https://stackoverflow.com/questions/912331

質問

私は、読み取り専用にし、[戻る]ボタンをクリックするだけで、フォーム上のコントロールの束を設定できるようにしたいです。それらをループする方法はありますか? this.Controls多分......

ありがとうございます。

役に立ちましたか?

解決

あなたが読み取り専用にすべてのコントロールを設定したい場合は、あなたのような何かを行うことができます:

foreach(Control currentControl in this.Controls)
{
    currentControl.Enabled = false;
}
読み取り専用にコントロールの一部を設定されているもの、あなたが本当にしたい場合は、

、私はむしろそれらのすべてよりも、そのリスト上のForEachをやって、関連するコントロールのリストを維持し、お勧めしたいです。

他のヒント

無効/有効にそれらを設定することは簡単で、GWLIosa'aの答えを見ています。

は、しかし、すべてのコントロールは、読み取り専用プロパティを持っていません。あなたが好きなものを使用することができます:

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);
        }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top