Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#从控件列表中引发事件_C#_List_Events_Controls_Trackbar - Fatal编程技术网

C#从控件列表中引发事件

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

警告:嵌入式软件删除程序正在尝试构建PC软件

我正在尝试连接一个通过串行接口与PC通信的硬件。PC软件(C#)周期性地发送一个字节数组,我想用一些轨迹条来调整它

我没有在设计视图上添加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]);
        }
    }
}
这意味着我想更新字节数组中的相关字节以匹配轨迹栏值,如果可能的话,使用事件


注意:这是一个表单模板,我通过另一个表单加载并关闭它。

您可以在创建轨迹栏时订阅事件。所有事件都可以具有相同的事件处理程序:

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

   }

}