2013-06-19 71 views
-1

我在事件上動態創建和跟蹤欄, 現在我想要一個文本框t來填充跟蹤欄的值。c#在創建對象之前使用對象

但我怎麼可能做到這一點?因爲我會得到一個錯誤,說動態創建的trackbar不存在。這是邏輯

這是我到目前爲止。

 TrackBar trackBar = new TrackBar(); 
     trackBar.Name = "TrackbarWidth" + trackbarName++; 
     trackBar.Tag = "dispose"; 
     trackBar.Maximum = 85; 
     trackBar.Minimum = 65; 
     trackBar.SmallChange = 5; 
     trackBar.TickFrequency = 5; 
     trackBar.Value = WidthValue; 
     trackBar.Location = new Point(175, 440 + (50 * trackbarName)); 
     trackBar.Size = new System.Drawing.Size(100, 25); 
     this.Controls.Add(trackBar); 

     TextBox textBox = new TextBox(); 
     textBox.Name = "TrackbarWidth" + TextboxName++; 
     textBox.Text = trackBar.Value.ToString(); 
     textBox.Tag = "dispose"; 
     textBox.Location = new Point(300, 440 + (50 * TextboxName)); 
     textBox.Size = new System.Drawing.Size(30, 25); 
     this.Controls.Add(textBox); 

     lineWidth += 4; 
    } 
#endregion 
} 

private void trackBar1_Scroll(object sender, EventArgs e){ 
    textBox1.Text = trackBar1.Value.ToString(); 
} 

這種解決方案的問題是,我無法訪問文本框或跟蹤條在trackBar1_Scroll方法。

+2

trackbar1正在初始化的位置? – Smeegs

+1

錯誤出現在按鈕trackbar1_scroll事件中。它說「trackbar1」和「textbox1」不存在,這是真的。因爲它們將被動態創建。 – user1859829

+0

trackbar1在listbox.selectedIndexChanged上初始化。 – user1859829

回答

1

最簡單的解決方案使用使用匿名事件處理程序,它能夠關閉您需要的兩個變量。在完成構建文本框後,請包括此內容:

this.Controls.Add(textBox); 
trackBar.Scroll += (s, args) => { 
    textbox.Text = trackbar.Value.ToString(); 
}; 
+0

謝謝,它的工作原理。儘管我不明白任何第二行代碼:) – user1859829

+1

@ user1859829它創建一個新的匿名方法,並將其添加爲'Scroll'事件的事件處理程序。特別是它被稱爲「Lambda」,如果你有興趣進一步閱讀這個主題。 – Servy

+0

謝謝,我寧願理解代碼,並能夠自己重新創建代碼。不僅僅是複製粘貼它。非常感謝你! – user1859829

1

sender參數總是觸發事件控制:

private void trackBar_Scroll(object sender, System.EventArgs e) 
{ 
    // TextBox also dynamic? One way is using ControlCollection.Find 
    textBox1 = this.Controls.Find("textBox1", true).FirstOrDefault() as TextBox; 
    if(textBox1 != null) 
     textBox1.Text = trackBar1.Value.ToString(); 
} 

但是,如果動態地創建它,你還可以創建事件處理程序:這裏

TrackBar trackBar = new TrackBar(); 
trackBar.Scroll += this.trackBar_Scroll; 
+1

他仍然無法以這種方式訪問​​文本框,只有trackbar。 – Servy

+0

現在,它也不知道textbox1,因爲它是動態創建的。但我似乎無法得到它的工作。加入這個「textBox.TextChanged + = this.textBox_TextChanged;」到動態文本框creater應該工作正確嗎? – user1859829

+1

@Servy:哦,TextBox也是動態創建的? –