C#从控件列表中引发事件
警告:嵌入式软件删除程序正在尝试构建PC软件 我正在尝试连接一个通过串行接口与PC通信的硬件。PC软件(C#)周期性地发送一个字节数组,我想用一些轨迹条来调整它 我没有在设计视图上添加8个轨迹栏,而是添加了一个来帮助我对齐它,然后创建一个列表,在加载时填充,如下所示:C#从控件列表中引发事件,c#,list,events,controls,trackbar,C#,List,Events,Controls,Trackbar,警告:嵌入式软件删除程序正在尝试构建PC软件 我正在尝试连接一个通过串行接口与PC通信的硬件。PC软件(C#)周期性地发送一个字节数组,我想用一些轨迹条来调整它 我没有在设计视图上添加8个轨迹栏,而是添加了一个来帮助我对齐它,然后创建一个列表,在加载时填充,如下所示: public partial class FormDmxTemplate : Form { // Controls // Create a list of tracbars. List<TrackBa
public partial class FormDmxTemplate : Form
{
// Controls
// Create a list of tracbars.
List<TrackBar> trackBarDmx = new List<TrackBar>();
public FormDmxTemplate()
{
InitializeComponent();
}
private void FormDmxTemplate_Load(object sender, EventArgs e)
{
// Add first instance on the list
trackBarDmx.Add(trackBarDmx1);
// Generate 7 more, 8 total, of each
// Copy settings, and place them next to each other
for (int i = 1; i < 8; i++)
{
// Trackbars
trackBarDmx.Add(new TrackBar());
trackBarDmx[i].TickStyle = trackBarDmx[0].TickStyle;
trackBarDmx[i].Orientation = trackBarDmx[0].Orientation;
trackBarDmx[i].Minimum = trackBarDmx[0].Minimum;
trackBarDmx[i].Maximum = trackBarDmx[0].Maximum;
trackBarDmx[i].Size = new System.Drawing.Size(trackBarDmx[0].Size.Width, trackBarDmx[0].Size.Height);
trackBarDmx[i].Location = new System.Drawing.Point(trackBarDmx[i-1].Location.X + 60, trackBarDmx[0].Location.Y);
this.Controls.Add(trackBarDmx[i]);
}
}
}
这意味着我想更新字节数组中的相关字节以匹配轨迹栏值,如果可能的话,使用事件
注意:这是一个表单模板,我通过另一个表单加载并关闭它。您可以在创建轨迹栏时订阅事件。所有事件都可以具有相同的事件处理程序:
trackBarDmx[i].Scroll += trackBarDmx1_Scroll;
然后在处理程序中,您可以找出哪个是这个轨迹栏,它位于哪个索引处(如果需要的话)
我不知道我是否理解你想要实现的目标。这是否满足您的需要:
for (int i = 0; i < 7; i++)
{
TrackBar trackBar = new TrackBar();
trackBar.Tag = i;
// Other properties
trackBar.Scroll += new EventHandler(trackBar_Scroll);
}
顺便说一句,你真的需要保留轨迹栏的列表吗?你可以这样做:
for (int i = 1; i < 8; i++)
{
// Trackbars
trackBarDmx.Add(new TrackBar());
trackBarDmx[i].TickStyle = trackBarDmx[0].TickStyle;
trackBarDmx[i].Orientation = trackBarDmx[0].Orientation;
trackBarDmx[i].Minimum = trackBarDmx[0].Minimum;
trackBarDmx[i].Maximum = trackBarDmx[0].Maximum;
trackBarDmx[i].Size = new System.Drawing.Size(trackBarDmx[0].Size.Width, trackBarDmx[0].Size.Height);
trackBarDmx[i].Location = new System.Drawing.Point(trackBarDmx[i-1].Location.X + 60, trackBarDmx[0].Location.Y);
this.Controls.Add(trackBarDmx[i]);
// Notice no number in the handler name
trackBarDmx[i].Scroll += trackBarDmx_Scroll;
}
喜欢顶部的红旗:D
for (int i = 0; i < 7; i++)
{
TrackBar trackBar = new TrackBar();
trackBar.Tag = i;
// Other properties
trackBar.Scroll += new EventHandler(trackBar_Scroll);
}
void trackBar_Scroll(object sender, EventArgs e)
{
// Get the trackbar
TrackBar current = sender as TrackBar;
// Do something here. Use tag property to identify which byte array should be changed
}
for (int i = 1; i < 8; i++)
{
// Trackbars
trackBarDmx.Add(new TrackBar());
trackBarDmx[i].TickStyle = trackBarDmx[0].TickStyle;
trackBarDmx[i].Orientation = trackBarDmx[0].Orientation;
trackBarDmx[i].Minimum = trackBarDmx[0].Minimum;
trackBarDmx[i].Maximum = trackBarDmx[0].Maximum;
trackBarDmx[i].Size = new System.Drawing.Size(trackBarDmx[0].Size.Width, trackBarDmx[0].Size.Height);
trackBarDmx[i].Location = new System.Drawing.Point(trackBarDmx[i-1].Location.X + 60, trackBarDmx[0].Location.Y);
this.Controls.Add(trackBarDmx[i]);
// Notice no number in the handler name
trackBarDmx[i].Scroll += trackBarDmx_Scroll;
}
private void trackBarDmx_Scroll(object sender, EventArgs e)
{
var tb = sender as TrackBar;
if(sender == null)
{return;}
switch (sender.Name)
{
case "trackBarDmx1_Scroll" :
// handle changes to bar 1
break;
// and so on
}
}