0

次の件について少しお役に立てれば幸いです。

1 か月の各日に 31 のパネルがあります。その日に (データセットで) レコードが見つかるたびに、パネルの背景を変更したいと考えています。

コードを見ると、どこに行くのかがわかります。すべてのパネルを個別に指摘する必要があります。あなたが私に尋ねると、これは長く見えます。すべてのパネルのインデックスを作成する必要があると思いますか?

これを行う別の/より良い方法はありますか? もしそうなら、どのように?

        int MaxRows;
        MaxRows = ds.Tables["Dataset"].Rows.Count;

        for (int i = 0; i != (MaxRows); i++)
        {
            DataRow dRow = ds.Tables["Dataset"].Rows[i];

            if (dRow.ItemArray.GetValue(1).ToString() == "1")
            {
                panDay1.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "2")
            {
                panDay2.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "3")
            {
                panDay3.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "4")
            {
                panDay4.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "5")
            {
                panDay5.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "6")
            {
                panDay6.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "7")
            {
                panDay7.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "8")
            {
                panDay8.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "9")
            {
                panDay9.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "10")
            {
                panDay10.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "11")
            {
                panDay11.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "12")
            {
                panDay12.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "13")
            {
                panDay13.BackColor = Color.LightSteelBlue;
            }
            else if (dRow.ItemArray.GetValue(1).ToString() == "14")
            {
                panDay14.BackColor = Color.LightSteelBlue;
            }
            etc. 
            etc.
            etc.

誰でも私を助けてもらえますか?

4

4 に答える 4

1

31 枚すべてのパネルの配列を作成する必要があります。

その後、書くことができます

panelArray[(int)dRow.ItemArray[i]].BackColor = Color.LightSteelBlue;
于 2012-06-03T12:15:06.790 に答える
1

パネルを動的に作成し、パネルを 1 つの親パネルに追加します。各パネルに一意の ID を付けます。panelDay_1、panelDay_2、panelDay_31。を使用して対応するパネルにアクセスします。

//Create panels dynamically
for(int i=0;i<dataTable.Rows.Count.i++)
{
     Panel p=new Panel();
     p.Name="panelDay_" + i;

     //Write code to set panels location and size

     //Add panel to the panels parent
     parentPanel.Controls.Add(p);
}

//Now access panel with the name
parentPanel.Controls["panelDay_" + i].Color=Color.Blue;
于 2012-06-03T12:22:27.937 に答える
0

おー!実際には、配列も作成せずにアクセスできると思います。観察すると、彼はパネル名を順番に付けています。このような

panDay1
panDay2
panDay3
  .
  .
panDay31.

その場合、コントロール c がすべてのパネルの親であると仮定すると、次のような名前を使用してアクセスできます。

 //Assuming form itself is the parent then
 c=this;
 c.Cotrols["panDay" + i].BackColor=Color.Blue;

それが役に立てば幸い。

于 2012-06-03T12:32:38.080 に答える
0

文字列を使用してコントロール コレクションにインデックスを付けることができます。この構文を許可するもの:

    for (int i = 0; i != (MaxRows); i++)
    {
        DataRow dRow = ds.Tables["Dataset"].Rows[i];
        this.Controls["panDay" + dRow.ItemArray.GetValue(1)].BackColor = Color.LightSteelBlue;
    }
于 2012-06-03T12:34:55.037 に答える