Gauges for WinForms
実行時の操作
C1Gauge の動作 > ユーザー操作 > 実行時の操作

実行時のさまざまなユーザー操作の結果として、C1Gauge および C1GaugeBase コンポーネントに対して数多くのイベントが発生します。これらのイベントのソースは、イベントハンドラに ItemEventArgs オブジェクトの Item プロパティから取得できる HitTestable 要素です。

ItemStateChanged イベントは、ゲージ項目がホットになるか、押されたときにゲージ項目の外観を更新するために使用できます。C1Gauge.SupportsTransitionEffect を True に設定した場合、ゲージ項目の状態を変更する際に特殊な遷移効果を適用できます。たとえば、次のようになります。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Private Sub c1LinearGauge1_ItemStateChanged(ByVal sender As System.Object, _ 
 ByVal e As ItemEventArgs) Handles c1LinearGauge1.ItemStateChanged
     If TypeOf e.Item Is C1GaugePointer Then
              Dim p As C1GaugePointer = CType(e.Item, C1GaugePointer)
              c1Gauge1.BeginUpdate()
              
              If e.ItemPressed Then
                     p.Filling.CommonFillingName = "pressedFilling"
               ElseIf e.ItemHot Then
                     p.Filling.CommonFillingName = "hotFilling"
              Else
                     p.Filling.CommonFillingName = "normalFilling"
              End If
               
              c1Gauge1.EndUpdate(200)
       End If
End Sub

C# コードの書き方

C#
コードのコピー
private void c1LinearGauge1_ItemStateChanged(object sender, ItemEventArgs e)
{
       if (e.Item is C1GaugePointer)
        {
              C1GaugePointer p = e.Item as C1GaugePointer;
              c1Gauge1.BeginUpdate();
              
              if (e.ItemPressed)
                     p.Filling.CommonFillingName = "pressedFilling";
               else if (e.ItemHot)
                     p.Filling.CommonFillingName = "hotFilling";
              else
                     p.Filling.CommonFillingName = "normalFilling";
                     
              c1Gauge1.EndUpdate(200);
       }
}

ItemMouseDown および ItemMouseMove イベントは、ポインタ値を更新するために使用できます。たとえば、次のようになります。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Private Sub c1RadialGauge1_ItemMouseDown(ByVal sender As System.Object, _
  ByVal e As ItemMouseEventArgs) Handles C1RadialGauge1.ItemMouseMove, C1RadialGauge1.ItemMouseDown
 If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
 Dim p As C1GaugePointer = e.Gauge.Pointer
 p.Value = p.GetValueAt(e.X, e.Y)
End If
End Sub

C# コードの書き方

C#
コードのコピー
private void c1RadialGauge1_ItemMouseDown(object sender, ItemMouseEventArgs e)
{
 if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
   {
   C1GaugePointer p = e.Gauge.Pointer;
   p.Value = p.GetValueAt(e.X, e.Y);
  }
}

上記のサンプルでは、C1GaugePoiner.GetValueAt() 関数を使用してマウスの位置を値に変換します。ユーザーがこのメソッドを使用して厳密な値を特定することが困難な場合があります。これを容易にするために、C1GaugePointer.Value プロパティに値を直接設定するのではなく、C1GaugePointer.UpdateValue() メソッドを使用して、特定の手順(snapInterval)の最も近い倍数に値を四捨五入することができます。このためには、次の行


p.Value = p.GetValueAt(e.X, e.Y)

を、たとえば以下の行に置き換える必要があります。


p.UpdateValue(p.GetValueAt(e.X, e.Y), 1.0)

これにより、割り当てられた値が自動的に整数値に四捨五入されます。

C1GaugeBase コンポーネントには、いくつかの追加イベントがあります。これらのイベントを使用して、ゲージポインタを 操作できます。

C1GaugeBase.PointerDragMove イベントを使用して、ポインタ値の単純な更新が可能です。たとえば、次のようになります。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Private Sub c1RadialGauge1_PointerDragMove(ByVal sender As System.Object, _
  ByVal e As PointerDragEventArgs) Handles c1RadialGauge1.PointerDragMove
 e.Pointer.UpdateValue(e.NewValue, 0.25)
End Sub

C# コードの書き方

C#
コードのコピー
private void c1RadialGauge1_PointerDragMove(object sender, PointerDragEventArgs e)
{
 e.Pointer.UpdateValue(e.NewValue, 0.25);
}

C1GaugeBase.PointerDragCancel イベントに同じハンドラをアタッチできます。このイベントを使用するには、C1Gauge.Selectable プロパティが True と同等になっている必要があります。ユーザーがポインタをドラッグしたときに、この変更をキャンセルして前の値に戻る場合は、[Esc]キーを押します。これにより、PointerDragCancel イベントが発生し、PointerDragEventArgs.NewValue プロパティが前の値に設定されます。

C1Gauge.Selectable プロパティ True に設定した後で、C1Gauge コントロールにより、Control.KeyDownControl.KeyPress、その他のキーボードイベントを使用できるようになります。C1Gauge.DrawFocus イベントにハンドラをアタッチすることもできます。これは、フォーカス矩形の範囲を変更したり、独自のフォーカス選択を描画したりする機能を提供します。

関連トピック