2013-09-05 2 views
1

.Net 트랙 바 컨트롤을 사용했습니다. 내 트랙 바 점은 0 ... 5 ... 10..15입니다. 문제는 사용자가 스크롤 막대를 스크롤 할 때 두 점 사이에서 스크롤을 쉽게 놓을 수 있다는 것입니다. 하지만 그 사용자는 내 디스플레이 지점에서만 스크롤을 드롭하지 않아도됩니다. 그들은 단지 0,5,10 등을 설정하지 않았습니다. 그들은 6,7,8,9를 설정하지 않았습니다 ...마우스로 TrackBar 컨트롤을 조정하면 SmallChange의 값을 여러 개 설정하고 그 중 하나를 설정하지 않도록하는 방법은 무엇입니까?

SmallChanges 속성을 5 값으로 설정했습니다. 그러나 마우스 스크롤이 아닌 키보드 변경 작업을합니다.

답변

2

ValueChanged 이벤트의 이벤트 처리기에서 해당 값을 재정 의하여 간단히 Value 속성을 SmallChange 속성의 배수로 설정할 수 있습니다. 예 :

private void trackBar1_ValueChanged(object sender, EventArgs e) { 
     var bar = (TrackBar)sender; 
     if (bar.Value % bar.SmallChange != 0) { 
      bar.Value = bar.SmallChange * ((bar.Value + bar.SmallChange/2)/bar.SmallChange); 
     } 
    } 

키보드를 사용할 때 동작하는 것처럼 사용자가 마우스로 엄지를 드래그하는 동안에도 작동한다는 점에 유의하십시오. 나는 그것이 당신이 원하는 것이라고 생각했습니다.

+0

흥미로운 솔루션. 몇몇 코너 케이스가 있습니다 (LargeChange가 SmallChange의 배수가 아니므로 반올림 문제가 발생합니다). http://stackoverflow.com/questions/23202679/force-trackbar-value-to-be-a-ten-multiple?lq=1의 더 간단한 해결책은 또한 흥미롭고 사용자 코드가 덜 호출됩니다. –

관련 문제