2

パネル内、つまりtabPage内、WinForm C#アプリケーション内にいくつかのチェックボックスとボタンがあります。

私がやろうとしているのは、少なくとも1つのチェックボックスがオンになっていることを確認することです。そうしないと、ボタンが無効になります(灰色の表示はクリックできません)。

私はこれを(イベントで)試しましForm_Loadたが、うまくいきませんでした:

int counter = 0;
        foreach (Control p in tabPage1.Controls)
        {
            if (p is Panel)
            {
                foreach (Control c in panel1.Controls)
                {
                    if (c is CheckBox)
                    {
                        if (((CheckBox)c).Checked)
                        {
                            counter++;
                        }
                        if (counter < 1)
                        {
                            button1.Enabled = false;
                        }
                        else
                        {
                            button1.Enabled = true;
                        }
                    }
                }
            }
        }

コードを配置するために間違ったイベントまたは間違った場所を使用しているか、コード自体が正しくないためです。誰か見てください。

4

3 に答える 3

8

あなたはこのようなことをすることができます(注意..あなたの特定のループは冗長です..あなたはコンテナの名前を知っています..なぜそれをループ検索するのですか?)

if (panel1.Controls.OfType<CheckBox>().Any(x => x.Checked)) {
    // at least one is checked..
于 2012-11-12T22:06:39.253 に答える
1

このコードは、次の2つの場所で実行する必要があります。

  • Load保存された値をチェックボックスにロードした後のフォームのイベント
  • チェックボックスのCheckedChangedイベントハンドラー。チェックボックスがオンになるとボタンの状態が更新されます。
于 2012-11-12T22:06:56.637 に答える
0

以下のコードで「p」変数を使用しないこの部分を削除してください...

foreach(Control p in tabPage1.Controls)
{
  if (p is Panel)
  {
int counter = 0;
foreach(Control c in panel1.Controls)
{
  if (c is CheckBox)
  {
    if (((CheckBox)c).Checked)
    {
      counter++;
    }
    if (counter < 1) {
      button1.Enabled = false;
    }
    else {
      button1.Enabled = true;
    }
  }
}
于 2020-06-16T05:08:09.987 に答える