1.需求
1)采用UserControl布置一些控件(button、lable、pictrue)
2)将UserControl在初始化时按配置动态加载到FORM,我采用的是加载到TableLayoutPanel内
3)问题:如何快速简洁正确更新各UserControl中的button、lable、pictrue
图为动态加载后的载图
图中,有三种UserControl,每种UserControl都有可能存在几个,根据配置来的,不固定
2、我的测试代码(完全新手,完全百度)
度娘找了很多资料,最终看到某文说可以用“"list"来实现数据的操作,但具体如何做不知道。
如果有更好的办法也可以,总之,上图的Pictrue、lable、button等,可以根据实时数据更新(每个UserControl都对应一种设备)
int count = 1;
LinkedList<UserControl> list = new LinkedList<UserControl>();//双向链表
LinkedListNode<UserControl> linkNode = list.First;
for (int i = 0; i < count; i++)
{
主枪柜_ctrl userControl1 = new 主枪柜_ctrl();
userControl1.Parent = tableLayoutPanel1;
userControl1.Anchor = AnchorStyles.None;
userControl1.Dock = DockStyle.Fill;
userControl1.title_lab.Text = "# - " + i.ToString();
userControl1.open_door_test_btn.Name = "open_door_test_btn_" + i.ToString();
userControl1.light_btn.Name = "light_btn_" + i.ToString();
int userControl1length = userControl1.Size.Width / 2;
int title_lablength = userControl1.title_lab.Size.Width / 2;
int x = userControl1length - title_lablength;
userControl1.title_lab.Location = new System.Drawing.Point(x, 6);
userControl1.open_door_test_btn.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name);
};
userControl1.light_btn.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name);
};
list.AddLast(userControl1);
this.SuspendLayout();
}
int count1 = 2;
for (int i = 0; i < count1; i++)
{
副枪柜_ctrl userControl1 = new 副枪柜_ctrl();
userControl1.Parent = tableLayoutPanel1;
userControl1.Anchor = AnchorStyles.None;
userControl1.Dock = DockStyle.Fill;
userControl1.title_lab.Text = "# - " + i.ToString();
userControl1.open_door_test_btn.Name = "open_door_test_btn_" + i.ToString();
userControl1.light_btn.Name = "light_btn_" + i.ToString();
int userControl1length = userControl1.Size.Width / 2;
int title_lablength = userControl1.title_lab.Size.Width / 2;
int x = userControl1length - title_lablength;
userControl1.title_lab.Location = new System.Drawing.Point(x, 6);
userControl1.open_door_test_btn.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name);
};
userControl1.light_btn.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name);
};
list.AddLast(userControl1);
this.SuspendLayout();
}
int count2 = 2;
for (int i = 0; i < count2; i++)
{
弹药柜_ctrl userControl1 = new 弹药柜_ctrl();
userControl1.Parent = tableLayoutPanel1;
userControl1.Anchor = AnchorStyles.None;
userControl1.Dock = DockStyle.Fill;
userControl1.title_lab.Text = "# - " + i.ToString();
userControl1.open_door_test_btn.Name = "open_door_test_btn_" + i.ToString();
userControl1.light_btn.Name = "light_btn_" + i.ToString();
userControl1.weight_clear_btn_1.Name = "weight_clear_btn_1" + i.ToString();
userControl1.weight_clear_btn_2.Name = "weight_clear_btn_2" + i.ToString();
userControl1.weight_clear_btn_3.Name = "weight_clear_btn_3" + i.ToString();
userControl1.weight_clear_btn_4.Name = "weight_clear_btn_4" + i.ToString();
int userControl1length = userControl1.Size.Width / 2;
int title_lablength = userControl1.title_lab.Size.Width / 2;
int x = userControl1length - title_lablength;
userControl1.title_lab.Location = new System.Drawing.Point(x, 6);
userControl1.open_door_test_btn.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name + userControl1.title_lab.Text);
};
userControl1.light_btn.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name);
};
userControl1.weight_clear_btn_1.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name);
};
userControl1.weight_clear_btn_2.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name);
};
userControl1.weight_clear_btn_3.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name);
};
userControl1.weight_clear_btn_4.Click += delegate (object sender, EventArgs e)
{
open_door_test(((Button)sender).Name);
};
list.AddLast(userControl1);
this.SuspendLayout();
}
tableLayoutPanel1.AutoScroll = true;
foreach (var item in list)
{
;
}
}
public void open_door_test(string button)
{
MessageBox.Show("按下" + button);
}