2011-09-04 153 views
0

我試圖動態地創建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

回答

1

您需要處理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 
} 

現在,當您有一個軌道條數組時,獲取所有值的總和應該是微不足道的。

相關問題