如何将轨迹栏的值更改为100并“激活”它?

时间:2018-02-11 21:42:35

标签: c# winforms

实施例

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox2.Checked) { 
   checkBox2.Checked = false; 
   checkBox2.Click -= checkBox2_CheckedChanged; 
}
}

private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
label1.Text = "2";
}

那么代码的作用是当你检查checkBox1时它会执行其他代码。 我想对trackBar做同样的事情,所以当我按下checkBox1时,它会激活trackBar1中的代码来改变一些值。

目前,我所做的只是将其设置为100(这是我设置的最大值),它确实改变了滑块位置,但代码中没有任何内容运行。

简而言之,我想将代码分配给一个复选框,使其好像我点击并更改了轨道栏的值。

1 个答案:

答案 0 :(得分:1)

您需要确保在Value更改TrackBar时收听正确的事件。

public Form1() { // Snip trackBar1.ValueChanged += trackbar1_ValueChanged; } private void trackbar1_ValueChanged(object sender, EventArgs e) { textBox1.Text = trackBar1.Value.ToString(); } 的初始化代码中,您需要具备以下内容:

TrackBar

这将为TextBox触发ValueChanged事件时设置一个侦听器,该事件将使用新值更新TrackBar.Value

然后,您的复选框事件处理程序只需要确保它在触发时设置ValueChanged属性,TrackBar事件将触发private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (trackBar1.Value == 10) { trackBar1.Value = 5; } else { trackBar1.Value = 10; } } ,如下所示:

TrackBar

如果TextBox的值为10,则单击该复选框,它会将值更新为5并更新TrackBar以读取5.如果在值不为10时单击该值,以上情况发生在10处。

如果您手动更改用户界面中的TextBox滑块,则会在您滑动时更新Scroll的值。

为什么滚动不起作用

由于您使用的是Scroll事件,因此您应该在MSDN查看该事件的文档。

来自文档:

  

当鼠标或键盘操作移动滚动框时发生。

这意味着Value事件仅在鼠标或键盘触发时触发。由于您是以编程方式在后面的代码中设置Scroll,因此ValueChanged事件永远不会触发。

为什么ValueChanged有效

问题就变成了,为什么{{1}}有效?我们再次转到MSDN的文档。

  

当轨道栏的Value属性发生更改时发生   滚动框的移动或代码中的操作。

由于您希望以编程方式更改它,因此这是您要收听的事件处理程序,因为它专门调用了您要完成的案例。