RadialGuage 같은 경우에는 RadialGuageNeedle Class 속성에 AllowDrag 라는 속성이 있어서 사용자가 마우스를 이용해서 변경 할 수 있습니다.
(인프라지스틱스 홈페이지 참조 : http://help.infragistics.com/NetAdvantage/winforms/CLR4.0/?page=WinGauge_Working_with_Linear_Gauges.html)
그치만 Linear Gauge의 LinearGaugeNeedle에는 AllowDrag를 제공하지 않아 직접 구현해야합니다.
일단 클릭한 지점의 Marker를 저장하기 위한 필드 하나를 작성합니다.
private LinearGaugeNeedle draggingNeedle; |
ultraGauge 개체의 아래의 이벤트 등록합니다.
this.ultraGauge.PrimitiveMouseDown += ultraGauge1_PrimitiveMouseDown; this.ultraGauge.MouseMove += ultraGauge1_MouseMove; this.ultraGauge.MouseLeave += ultraGauge1_MouseLeave; this.ultraGauge.MouseUp += ultraGauge1_MouseUp; |
아래와 같이 구현합니다.
MouseDown 되었을때에는 needle 개체를 얻고,
MouseMove될때는 얻은 needle개체가 있다면 Value를 설정합니다.
아래의 예제같은경우 min, max를 지정을해서 Range 밖으로의 이동을 막았습니다.
private void ultraGauge1_PrimitiveMouseDown(object sender, GaugePrimitiveMouseEventArgs e) { LinearGaugeNeedle needle = e.Primitive.Element as LinearGaugeNeedle; if (needle != null) { this.draggingNeedle = needle; } }
private void ultraGauge1_MouseMove(object sender, MouseEventArgs e) { if (this.draggingNeedle != null) {
Rectangle scaleBounds = this.draggingNeedle.Scale.GetScaleBounds(this.ultraGauge.Bounds); double value = (double)this.draggingNeedle.Scale.Axis.MapInverse(e.X, scaleBounds.Left, scaleBounds.Right); if (value < min || value > max) return; this.draggingNeedle.Value = value; System.Diagnostics.Debug.WriteLine(this.draggingNeedle.Value); } } private void ultraGauge1_MouseLeave(object sender, EventArgs e) { this.draggingNeedle = null; } private void ultraGauge1_MouseUp(object sender, MouseEventArgs e) { this.draggingNeedle = null; }
|
부모 컨테이너에서 MouseUp 되는것도 감지해줘야하기 때문에
해당 컨테이너의 Mouse Up 또는 Mouse Leave 되는 이벤트도 override해줍니다.
protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); this.draggingNeedle = null; }
protected override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); this.draggingNeedle = null; } |
결과 이미지입니다.
아래 압축파일은 예제 Form Class파일입니다.
'.Net > Component' 카테고리의 다른 글
[ChartFX for WPF] DataTemplate를 이용해 LegendBox를 변경 (0) | 2013.03.27 |
---|---|
[ERWIN] 컬럼 순서 (0) | 2013.03.18 |
[Infragistics] UltraChart BoxChart (Whisker Chart) (0) | 2012.12.07 |
FarPoint Column Width 조절 (0) | 2012.08.16 |
FpSpreadSheet4.0 Sheet의 데이터 및 스키마를 Save 및 Open 하기 (0) | 2012.06.27 |