-3
foreach (Control c in this.Controls)
{
   if (c is Button)
   {
      Button b = (Button)c;
      if (b.Tag.Equals("submit") && b.Tag.Equals("save"))
      {
         b.Visible = false;
      }
   }
}

これらを非表示にしてプロパティボタンにタグを付けようとしていますが、フォームの読み込み時に他のボタンが表示されます。これは私のコードが機能していないことです。しかし、エラーは「オブジェクト参照が設定されていません........」と表示されます

4

1 に答える 1

6

質問 1: 実際Tagに何かを設定しましたか?
質問 2: なぜTagボタン インスタンス自体ではなく、 を使用するのですか?
質問 3: がTag同時に 1 つの値と別の値であると想定するにはどうすればよいですか?

質問2)について:これを行うことができます

if (c == btnSubmit) { ... }
if (c == btnSave) { ... }

プロパティで 2 つのボタンに名前を付けたとします。これも私がお勧めするソリューションです!

質問 3) について: あなたのコードは (おそらく) 読むべきです

if (b.Tag.ToString().Equals("submit") || b.Tag.ToString().Equals("save"))
{
   b.Visible = false;
}

ボタンの名前がそれに応じて付けられていると仮定すると、コード全体を次のようにリファクタリングできることに気づきました。

btnSubmit.Visible = false;
btnSave.Visible = false;

ループなし、何もありません!デフォルトでは、フォーム上のすべてのコントロールには、クラスにもインスタンス メンバーがあります (コントロールのプロパティで別の方法で構成しない限り)。では、フォーム上のすべてのコントロールをループするのはなぜですか (ちなみに、ボタンが 内にある場合でも機能しませんPanel)。最初の場所?

于 2013-05-02T07:11:51.357 に答える