1
  if(pictureBox1.Tag.ToString() == "accept")
        {
            char room1 = Convert.ToChar(lbl_roomid1.Text);
            row1[13] = (byte)room1;

            DateTime sdt1 = DateTime.Parse(txt_sdate1.Text);
            //some code
         }
  if (pictureBox2.Tag.ToString() == "accept")
        {
            char room2 = Convert.ToChar(lbl_roomid2.Text);
            row1[13] = (byte)room2;

            DateTime sdt1 = DateTime.Parse(txt_sdate2.Text);
            //some code
         }

/ *このコードをループ内に入力したい場合はどうなりますか?10個のピクチャーボックスについても同じことをする必要があります*/

4

3 に答える 3

4

このようなもの:

    public void DoMagic(Label label, TextBox textBox)
    {
        //...
    }

この:

        foreach (Control currentControl in this.Controls)
        {
            if (currentControl is PictureBox)
            {
                if (((PictureBox)currentControl).Tag.ToString().Equals("accept"))
                {
                    string controlId = currentControl.Name.Remove(0, 11);
                    string labelName = string.Concat("lbl_roomid", controlId);
                    string txtName = string.Concat("txt_sdate", controlId);

                    this.DoMagic(this.Controls.Find(labelName, true)[0] as Label, this.Controls.Find(txtName, true)[0] as TextBox);
                }
            }
        }

よろしく

于 2012-07-30T07:15:31.367 に答える
2

要素の配列を作成できます。

以下、ちょっと汚いですが…

class PBRoomDate {
  // Helper data holder class. Could probably be an anonymous class in C# 4.0
  public PictureBox PB;
  public Label RoomLabel;
  public TextBox DateText;
  PBRoomDate(PictureBox PB, Label RoomLabel, TextBox DateText) {
    this.PB = PB; this.RoomLabel = RoomLabel; this.DateText = DateText;
  }
}

// [...]

var pbRoomDates = new PBRoomDate[]{
  new PBRoomDate(pictureBox1, lbl_roomid1, txt_sdate1),
  new PBRoomDate(pictureBox2, lbl_roomid2, txt_sdate2),
  new PBRoomDate(pictureBox3, lbl_roomid3, txt_sdate3),
  // etc.
};

foreach(var pbRoomDate in pbRoomDates) {
  if(pbRoomDate.PB.Tag.ToString() == "accept") {
    row1[13] = (byte)Convert.ToChar(pbRoomDate.RoomLabel.Text);
    DateTime dt = DateTime.Parse(pbRoomDate.DateText.Text);
  }
}

よりクリーンなソリューションは、カスタム UserControl を使用して「ピクチャ ボックス」ごとに 3 つの要素を格納し、それらをレイアウトすることです。これにより、保守が容易になり、必要に応じて拡張できるようになります。

于 2012-07-30T07:19:32.650 に答える
0

C# のフォーム要素にアクセスするためのループ。

私は通常、このようなものを使用します。

10 個のピクチャボックスがあるとします。picturebox1 ~ picturebox10 という名前を付けます。

次に、番号が 10 にループするようにループを実行します

String Picturebox = "picturebox" + no.ToString();
Control[] oControl = Controls.Find(Picturebox, true);
foreach(Control foundControl in oControl)
{
  PictureBox foundControlA = foundControl as PictureBox;
  foundControlA.(methods or property here) = (what you want to put to foundControlA)

}

各コントロールに付随するコントロールがさらにある場合は、同じ方法を使用できます。ここでのヒントは、winform の要素またはオブジェクトに同じ命名規則を使用し、必要に応じて変数 no をループすることです。

于 2012-07-30T08:03:59.357 に答える