当我将轨迹栏添加到窗体并设置
Me.TrackBar1.Minimum = 0
Me.TrackBar1.Maximum = 100
Me.TrackBar1.LargeChange = 10
Me.TrackBar1.SmallChange = 10
Me.TrackBar1.TickFrequency = 10..。轨迹条显示为berzerk:
我可以通过拖动栏来选择任何较小的值。跟踪条不再停留在10、20、30等值上。我可以手动选择任何较小的值。
我通过添加以下代码来确认这一点:
Private Sub TrackBar1_ValueChanged(sender As Object, e As EventArgs) Handles TrackBar1.ValueChanged
Me.Text = Me.TrackBar1.Value
End Sub我是否忽略了文档中的任何内容,或者是Framework4.6.1中的bug?
发布于 2017-12-05 11:45:23
我不知道你的问题是问什么,但经过思考,我终于明白了你问的是什么。这是你的问题:
我可以通过拖动栏来选择任何较小的值。跟踪条不再停留在10、20、30等值上。我可以手动选择任何较小的值。
SmallChange的文档中写道:
当用户按下其中一个箭头键时,
属性会根据在SmallChange属性中设置的值而变化。
LargeChange的文档是这样写的:
当用户按PAGE UP或PAGE DOWN键或单击滚动框任一侧的轨迹栏时,
属性会根据在LargeChange属性中设置的值而变化。
澄清了你的问题
您询问的是,如果您使用鼠标,那么跟踪条的值不会随着指定的大小变化而变化,而不是使用键盘,在您的情况下是10。它实际上是递增/递减1,所以它是1,2,3等等。但是你想让它变成10,20,30等等。
解决方案
您可以处理Scroll事件并检查该值是否为10的倍数,如果是,则不执行任何操作。如果不是,则将其更改为10的倍数。
VB.NET
Private Sub trackBar1_Scroll(ByVal sender As Object, ByVal e As EventArgs)
Dim bar = CType(sender, TrackBar)
Dim isMultipleOfTen As Boolean = bar.Value Mod bar.SmallChange = 0
If isMultipleOfTen Then
Return
End If
bar.Value = bar.SmallChange * ((bar.Value + bar.SmallChange / 2) / bar.SmallChange)
End SubC#
private void trackBar1_Scroll(object sender, EventArgs e)
{
var bar = (TrackBar)sender;
bool isMultipleOfTen = bar.Value % bar.SmallChange == 0;
if (isMultipleOfTen)
{
return;
}
bar.Value = bar.SmallChange * ((bar.Value + bar.SmallChange / 2) / bar.SmallChange);
}https://stackoverflow.com/questions/47642299
复制相似问题