警告:嵌入式软件开发人员正在尝试构建 PC 软件!
我正在尝试连接一个通过串行接口(interface)与 PC 通信的硬件。 PC 软件 (C#) 定期发送一个字节数组,我想使用一些轨迹条对其进行调整。
我没有在设计 View 上添加 8 个轨迹栏,而是添加一个来帮助我对齐它,然后创建一个列表,我在加载时填充它,如下所示:
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]);
}
}
}
是否可以像这样为所有 List 成员举办事件?
private void trackBarDmx1_Scroll(object sender, EventArgs e)
{
}
这意味着我想更新字节数组中的相关字节以匹配 TrackBar 值,如果可能的话使用事件。
注意:这是我通过另一个表单加载和关闭的表单模板。
最佳答案
您可以在创建 TrackBar 时订阅事件。所有的都可以有相同的事件处理程序:
trackBarDmx[i].Scroll += trackBarDmx1_Scroll;
然后在处理程序中你可以找出哪个是这个 TrackBar 以及它在哪个索引处(如果需要的话)
private void trackBarDmx1_Scroll(object sender, EventArgs e)
{
TrackBar bar = sender as TrackBar;
int trackBarIndex = this.trackBarDmx.IndexOf(bar);
}
关于C# 从控件列表引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21987402/