0

この GroupControl に GroupControl を含むフォームがあり、いくつかのコントロールがあります。

ボタンをクリックして、そのコントロールのプロパティを変更したいcontrol.Properties.ReadOnly = false;

だから私はこのコードを作成しました:

      foreach (TextEdit te in InformationsGroupControl.Controls)
      {
           te.Properties.ReadOnly = false;
      }

      foreach (TextEdit te in InformationsGroupControl.Controls)
      {
           te.Properties.ReadOnly = false;
      }
      foreach (DateEdit de in InformationsGroupControl.Controls)
      {
           de.Properties.ReadOnly = false;
      }
      foreach (ComboBoxEdit cbe in InformationsGroupControl.Controls)
      {
           cbe.Properties.ReadOnly = false;
      }
      foreach (MemoEdit me in InformationsGroupControl.Controls)
      {
           me.Properties.ReadOnly = false;
      }
      foreach (CheckEdit ce in InformationsGroupControl.Controls)
      {
           ce.Properties.ReadOnly = false;
      }

これでうまくいきましたが、すべてのコントロールに対して foreach ループを作成する必要があります。

私もこれを試しました

foreach (Control control in InformationsGroupControl.Controls)
{
    control.Properties.ReadOnly = false;
}

ただし、System.Windows.Forms.Control には「プロパティ」の定義が含まれていません

GroupControl 内のすべてのコントロールに対して foreach ループを 1 つだけ作成するにはどうすればよいですか?

4

3 に答える 3

2

すべてが同じ BaseClass から派生したコントロールのグループを使用しているようです。それはBaseClass、BaseEditですか?

なら、こうして…

foreach(object control in InformationsGroupControl.Controls)
{
    BaseEdit editableControl = control as BaseEdit;
    if(editableControl != null)
        editableControl.Properties.ReadOnly = false;
}

私はこのリンクからこの推測を行っています(使用しているようなコントロールがあります)。 http://documentation.devexpress.com/#WindowsForms/DevExpressXtraEditorsBaseEditMembersTopicAll

于 2012-09-22T17:31:22.463 に答える
1

私は基本クラスのアプローチを好むでしょう。しかし、「ReadOnly = false」にする必要があるのはいくつかのタイプだけだと言ったので、次のようなことができます

foreach (Control c in InformationsGroupControl.Controls)
{
   if(c is TextEdit || c is DateEdit || c is ComboBoxEdit || c is MemoEdit || c is CheckEdit)
       (c as BaseEdit).Properties.ReadOnly = false;
}
于 2012-09-22T18:05:18.573 に答える
0

linq を含めます。

次のコードを使用します。

foreach (var edit in InformationsGroupControl.Controls.OfType<BaseEdit>())
{
    edit.Properties.ReadOnly = false;
}
于 2012-09-24T13:10:49.377 に答える