0

このコードを完成させたばかりで、次のコードをループに変更したいと考えています。各部門には特定のボタンがあり、クリックすることを想定しており、部門 1、2、または 3 のいずれかにいる人にのみ表示される必要があります。

ここで誰かが私に何らかの指導をしてくれませんか。

                pchk.Visible = true;

                Int32 count = 0;
         count = chk.GetCount(1);
         // dept 1
                if (count == -1)
                {
                    btnDept1.Visible = false;
                }
                else
                {
                    btnDept1.Text = "Next dep1[" + count.ToString() + "]";
                    if (count == 0)
                        btnDept1.Enabled = false;
                }

                // dept 2
                count = chk.GetCount(2);
                if (count == -1)
                {
                    btnDept2.Visible = false;
                }
                else
                {
                    btnDept2.Text = "Next dep2 [" + count.ToString() + "]";
                    if (count == 0)
                        btnDept02.Enabled = false;
                }
                // dept 3
                count = chk.GetCount(3);
                if (count == -1)
                {
                    btnDept3.Visible = false;
                }
                else
                {
                    btnDept3.Text = "Next dept3 [" + count.ToString() + "]";
                    if (count == 0)
                        btnDept3.Enabled = false;
                }
            }
4

4 に答える 4

3

これをループに変換する際の最大の課題はbtnDept1、数値に基づいて値を取得することです。1 つの方法は、switch ステートメントでこれを行うメソッドを導入することです。

Button GetButton(int id) {
  switch (id) {
    case 1: return btnDept1;
    case 2: return btnDept2;
    ...
  }
}

または別のアプローチは、それらを配列に保持し、インデックスを使用して配列にアクセスすることです。いずれにしても、次の方法でループに折りたたむことができます

for (int i = 0; i < TheCount; i++) {
  int id = i + 1;
  Button button = GetButton(id);
  int count = chk.GetCount(2);
  if (count == -1) { 
    button.Visible = false;
  } else { 
    button.Text = String.Format("Next dep{0} [{1}]", id, count);
    if (count == 0) {
      button.Enabled = false;
    }
  }                   
}
于 2013-03-28T17:33:04.360 に答える
0
    for (int i = 1; i <= 3; i++)
    {
        count = chk.GetCount(i);
        if (count == -1)
        {
            switch (i)
            {
                case 1:
                    btnDept1.Visible = false;
                    break;
                case 2:
                    btnDept2.Visible = false;
                    break;
                case 3:
                    btnDept3.Visible = false;
                    break;
            }
        }
        else
        {
            switch(i)
            {
                case 1:
                    btnDept1.Text = "Next dep1[" + count.ToString() + "]";
                    if (count == 0)
                        btnDept1.Enabled = false;
                    break;
                case 2:
                    btnDept1.Text = "Next dep1[" + count.ToString() + "]";
                    if (count == 0)
                        btnDept1.Enabled = false;
                    break;
                case 3:
                    btnDept1.Text = "Next dep1[" + count.ToString() + "]";
                    if (count == 0)
                        btnDept1.Enabled = false;
                    break;
            }
        }
    }
于 2013-03-28T17:29:07.133 に答える
0

次のようなことを試してください:

private void SetButton(int id, Button btn)
{
    var count = chk.GetCount(id);
    if (count == -1)
    {
        btn.Visible = false;
    }
    else
    {
        btn.Text = String.Format("Next dep{0}[{1}]", id.ToString(), count.ToString());
        if (count == 0)
            btn.Enabled = false;
    }

}

使用法は次のようになります。

SetButton(1, btnDept1);
SetButton(2, btnDept2);
SetButton(3, btnDept3);

もちろん、ボタンの配列/リストを使用すると、さらに簡単になります...

例えば

Button[] buttons = new Button[] { btnDept1, btnDept2, btnDept3};
for (int i = 0; i < buttons.Length; i++)
   SetButton(i, buttons[i]);
于 2013-03-28T17:33:07.203 に答える
0

必要なボタンを取得する簡単な方法を次に示します。の " " にi値を追加するだけです。nullをチェックして、仕事に行く...btnDeptActiveForm.Controls[...]

    for (int i = 0; i < deptCount; i++)
    {
        Button b = ActiveForm.Controls["btnDept" + i.ToString()] as Button;

        if (b != null)
        {
            if (count == -1)
            {
                b.Visible = true;
            }
            else
            {
                // etc.
            }
        }
    }
于 2013-03-28T17:39:35.620 に答える