动态创建的trackbars和标签,并将它们连接在一起在C#

问题描述:

我试图动态地创建trackbars和标签。其中如果用户输入数字4,则会创建4个轨道条和4个标签。然后,如果用户移动任何动态创建的轨迹栏,则移动它并更新其关联的标签。然后在所有标签中添加数字并将其存储在另一个标签呼叫总标签中。动态创建的trackbars和标签,并将它们连接在一起在C#

这是解释它的另一种方式。用户输入数字3.系统创建3个轨道条和3个标签(轨道条旁边)。用户将第一个轨迹条移动到5,第一个标签自动更新为5.用户将第二个轨迹条移动到3,第二个标签自动更新为3.最后,用户将第三个轨迹条移动到位置9,标签自动更新为9.
在右侧有另一个标签,显示17 =(5 + 3 + 9)。

我发现几个网站ons创建动态控制,但我不知道如何链接动态创建的trackbar动态创建的标签。然后添加这些动态添加的标签。

所有这一切都在Windows窗体上的C#中。

创建我的标签和轨迹条时,我在下面做了一些非常类似的事情。

for (int i = 0; i < 10; i++) 
{ 
    Label label = new Label(); 
    label.Text = i.ToString(); 
    PlaceHolder1.Controls.Add(label); 
} 

感谢进步

------------------------更新----------- ------

无效CreateLabeledTrackBars(控制主机,INT N)

我怎么用这个,我希望,当我开始一个新的形式

,所有我会是这样的形式已经有了n,但它似乎不工作..我很困惑如何th e控制工程。能否请您解释

namespace WindowsFormsApplication1 
{ 
    public partial class Form3 : Form 
    { 

    public static Form2 myNewForm = new Form2(); 

      private TrackBar[] _trackBars; 
      private Label[] _labels; 
    public Form3(int n) 
     { 
CreateLabeledTrackBars(new Label(), n); 
} 

//Then the rest of the code 
+0

你提到这是'Windows窗体',我假设你使用的是WinForms,而不是WPF? –

+0

这是正确的..新 - >项目 - >窗体表单应用程序..我是如何创建项目 – Matt

您需要处理ValueChanged事件创建的每个TrackBar的。要计算所有值的总和,请将创建的控件存储在数组中。

private TrackBar[] _trackBars; 
private Label[] _labels; 

void CreateLabeledTrackBars(Control host, int n) 
{ 
    const int trackBarWidth = 150; 
    const int minValue = 0; 
    const int maxValue = 10; 
    const int defaultValue = 0; 

    _trackBars = new TrackBar[n]; 
    _labels = new Label[n]; 
    int y = 0; 
    for(int i = 0; i < n; ++i) 
    { 
     var label = new Label() 
     { 
      Top  = y, 
      Left = trackBarWidth, 
      Text = defaultValue.ToString(), 
      Parent = host, 
     }; 
     var trackBar = new TrackBar() 
     { 
      Top  = y, 
      Width = trackBarWidth, 
      // save associated label 
      Tag  = label, 
      Minimum = minValue, 
      Maximum = maxValue, 
      Value = defaultValue, 
      Parent = host, 
     }; 
     // handle ValueChangedEvent 
     trackBar.ValueChanged += OnTrackBarValueChanged; 
     // apply vertical offset for next trackbar 
     y += trackBar.Height; 
     _trackBars[i] = trackBar; 
     _labels[i] = label; 
    } 
} 

void OnTrackBarValueChanged(object sender, EventArgs e) 
{ 
    // get trackbar, which generated event 
    var trackBar = (TrackBar)sender; 
    // get associated label 
    var associatedLabel = (Label)trackBar.Tag; 
    associatedLabel.Text = trackBar.Value.ToString(); 
    // recalculate sum of all values and update other label here 
} 

现在,当您有一个轨道条数组时,获取所有值的总和应该是微不足道的。