C # Raise an event from a list of controls

WARNING: firmware delevoper is trying to create PC software!

I am trying to connect a piece of equipment that communicates with a PC via a serial interface. PC software periodic transmission (C #) sends an array of bytes, which I would like to configure using some trackballs.

Instead of adding 8 tracks in the project view, I add one to help me align it, and then create a list that I populate when I load it like this:

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]);
        }
    }
}

Is it possible to have events for all list members like this?

private void trackBarDmx1_Scroll(object sender, EventArgs e)
{

}

This means that I would like to update the corresponding byte in my byte array so that it matches the value of the TrackBar, using events, if possible.

. , .

+4
3

TrackBars. :

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);
}
+2

, , . , :

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
        }

, TrackBar?

+1

You can do it:

    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;
     }

Now in the handler the easiest way to do the following:

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

   }

}
+1
source

All Articles