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 来包含每个“图片框”的三个元素并将它们布局。如果需要,这也将更容易维护和更可扩展。

于 2012-07-30T07:19:32.650 回答
0

循环访问 c# 中的表单元素。

我通常使用这样的东西。

假设我有 10 个图片框,我将其命名为图片框 1 - 图片框 10。

然后做一个循环让数字循环到 10 我在里面使用一个变量 no 把这个代码

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)

}

如果每个控件都有更多控件,则可以使用相同的方法。这里的提示是我在我的 winforms 中的元素或对象上使用相同的命名约定,并根据你想要的循环变量 no。

于 2012-07-30T08:03:59.357 回答