当我向表单添加轨道栏并设置
时 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
我是否忽略了文档中的任何内容,或者是Framework 4.6.1中的错误?
答案 0 :(得分:1)
我不知道你在问题中提出了什么,但在考虑之后我终于想出了你在问什么。这是你的问题:
我可以通过拖动栏来选择任何小值。轨迹栏不再适用于10,20,30等值。我可以手动选择任何小值。
SmallChange的文档说:
当用户按下其中一个箭头键时,Value属性会根据SmallChange属性中设置的值而更改。
LargeChange的文档说:
当用户按下PAGE UP或PAGE DOWN键或单击滚动框两侧的轨迹栏时,Value属性会根据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 Sub
<强> C#强>
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);
}