动态创建的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
答
您需要处理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
}
现在,当您有一个轨道条数组时,获取所有值的总和应该是微不足道的。
你提到这是'Windows窗体',我假设你使用的是WinForms,而不是WPF? –
这是正确的..新 - >项目 - >窗体表单应用程序..我是如何创建项目 – Matt