2013-06-19 51 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也是动态创建的? –