TouchToolKit for WinForms
基本的な使い方
TouchToolKit の使い方 > C1TouchEventProviderコンポーネント > 基本的な使い方

ここでは、C1TouchEventProviderコンポーネントの基本的な使用方法について解説します。

イベントの種類

C1TouchEventProviderコンポーネントでは、次のイベントを検出できます。

コントロールへの関連付け

特定のコントロールでタッチやペンのイベントを検出するには、コントロールとC1TouchEventProviderコンポーネントを関連づける必要があります。

TextBoxコントロール(TextBox1)とC1TouchEventProviderコンポーネント(C1TouchEventProvider1)を関連づけるには、以下の手順で設定します。

  1. TextBoxコントロール(TextBox1)およびC1TouchEventProviderコンポーネント(C1TouchEventProvider1)をフォームに追加します。
  2. TextBox1を選択し、プロパティウィンドウから「C1TouchEventProvider1のEnableTouchEvents」プロパティをTrueに設定します。

また、コードから設定するにはC1TouchEventProvider.SetEnableTouchEventsメソッドを使用します。

Visual Basic コードの書き方

Visual Basic
コードのコピー
C1TouchEventProvider1.SetEnableTouchEvents(TextBox1, True)

C# コードの書き方

C#
コードのコピー
C1TouchEventProvider1.SetEnableTouchEvents(TextBox1, true);

ルーティングポリシー

C1TouchEventProviderコンポーネントのすべてのイベントはルーティングイベントです。これはC1TouchEventProviderコンポーネントがコンテナコントロールにアタッチされたとき、コンテナコントロールの子コントロールもC1TouchEventProviderコンポーネントのイベントで処理できることを意味します。

以下の例ではパネル上に3つのボタンがあります。そしてパネルにC1TouchEventProviderコンポーネントがアタッチされています。

パネル上のボタンをタップしたとき、C1TouchEventProvider.Tappedイベントが発生します。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Imports C1.Win.C1TouchToolKit

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    C1TouchEventProvider1.SetEnableTouchEvents(Panel1, True)
End Sub

Private Sub C1TouchEventProvider1_Tapped(sender As System.Object, e As TappedEventArgs) Handles C1TouchEventProvider1.Tapped
    If Not e.TargetControl Is Nothing Then
        Console.WriteLine(e.TargetControl.Name)
    End If
End Sub

C# コードの書き方

C#
コードのコピー
using C1.Win.C1TouchToolKit;

private void Form1_Load(object sender, EventArgs e)
{
    C1TouchEventProvider1.SetEnableTouchEvents(panel1, true);
    C1TouchEventProvider1.Tapped += new EventHandler<TappedEventArgs>(C1TouchEventProvider1_Tapped);
 }

private void C1TouchEventProvider1_Tapped(object sender, TappedEventArgs e)
{
    if (e.TargetControl != null)
        Console.WriteLine(e.TargetControl.Name);
}

ルーティングの方向

ルーティングイベントは親コントロールに対して子コントロールから先に発生します。たとえばPanel1の子コントロールとしてButton1があります。このときButton1とPanel1の両方がC1TouchEventProviderコンポーネントにアタッチされているものとします。タッチのイベントはButton1に対して先に発生し、その後Panel1に対して発生します。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Imports C1.Win.C1TouchToolKit

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    C1TouchEventProvider1.SetEnableTouchEvents(Button1, True)
    C1TouchEventProvider1.SetEnableTouchEvents(Panel1, True)
End Sub

Private Sub C1TouchEventProvider1_Tapped(sender As System.Object, e As TappedEventArgs) Handles C1TouchEventProvider1.Tapped
    If Not e.TargetControl Is Nothing Then
        Console.WriteLine("{0},{1}", DateTime.Now.ToString(), e.TargetControl.Name)
    End If
End Sub

C# コードの書き方

C#
コードのコピー
using C1.Win.C1TouchToolKit;

private void Form1_Load(object sender, EventArgs e)
{
    C1TouchEventProvider1.SetEnableTouchEvents(button1, true);
    C1TouchEventProvider1.SetEnableTouchEvents(panel1, true);
    C1TouchEventProvider1.Tapped += new EventHandler<TappedEventArgs>(C1TouchEventProvider1_Tapped);
}

private void C1TouchEventProvider1_Tapped(object sender, TappedEventArgs e)
{
    if (e.TargetControl != null)
        Console.WriteLine("{0},{1}", DateTime.Now.ToString(), e.TargetControl.Name);
}

ルーティングイベントの情報

C1TouchEventProviderコンポーネントのすべてのイベント引数は、TouchRoutedEventArgsクラスを継承します。TouchRoutedEventArgsクラスを通してTargetControlプロパティとOriginalSourceプロパティを取得できます。TargetControlプロパティは現在のイベントのコントロールを示します。OriginalSourceプロパティはイベントを受け取った最初のコントロールを示します。

たとえばPanel1の子コントロールとしてButton1があります。このときButton1とPanel1の両方がC1TouchEventProviderコンポーネントにアタッチされているものとします。Button1がタッチイベントを受信したとき、TargetControlプロパティは"Button1"、OriginalSourceプロパティも"Button1"になります。Panel1がタッチイベントを受信したとき、TargetControlプロパティは"Panel1"、OriginalSourceプロパティは"Button1"になります。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Imports C1.Win.C1TouchToolKit

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    C1TouchEventProvider1.SetEnableTouchEvents(Button1, True)
    C1TouchEventProvider1.SetEnableTouchEvents(Panel1, True)
End Sub

Private Sub C1TouchEventProvider1_Tapped(sender As System.Object, e As TappedEventArgs) Handles C1TouchEventProvider1.Tapped
    If Not e.TargetControl Is Nothing Then
        Console.WriteLine("{0},{1},{2}", DateTime.Now.ToString(), e.TargetControl.Name, e.OriginalSource.Name)
    End If
End Sub

C# コードの書き方

C#
コードのコピー
using C1.Win.C1TouchToolKit;

private void Form1_Load(object sender, EventArgs e)
{
    this.C1TouchEventProvider1.SetEnableTouchEvents(button1, true);
    this.C1TouchEventProvider1.SetEnableTouchEvents(panel1, true);
    this.C1TouchEventProvider1.Tapped += new EventHandler<TappedEventArgs>(C1TouchEventProvider1_Tapped);
}

private void C1TouchEventProvider1_Tapped(object sender, TappedEventArgs e)
{
    if (e.TargetControl != null)
        Console.WriteLine("{0},{1},{2}", DateTime.Now.ToString(), e.TargetControl.Name, e.OriginalSource.Name);
}

イベントのハンドリング

子コントロールでイベントを処理し、親コントロールでイベントを処理したくない場合、TouchRoutedEventArgs.HandledプロパティにTrueを設定することでイベントをブロックできます。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Imports C1.Win.C1TouchToolKit

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    C1TouchEventProvider1.SetEnableTouchEvents(Button1, True)
    C1TouchEventProvider1.SetEnableTouchEvents(Panel1, True)
End Sub

Private Sub C1TouchEventProvider1_Tapped(sender As System.Object, e As TappedEventArgs) Handles C1TouchEventProvider1.Tapped
    If Not e.TargetControl Is Nothing Then
        Console.WriteLine("{0},{1},{2}", DateTime.Now.ToString(), e.TargetControl.Name, e.OriginalSource.Name)
        e.Handled = True
    End If
End Sub

C# コードの書き方

C#
コードのコピー
using C1.Win.C1TouchToolKit;

private void Form1_Load(object sender, EventArgs e)
{
    this.C1TouchEventProvider1.SetEnableTouchEvents(button1, true);
    this.C1TouchEventProvider1.SetEnableTouchEvents(panel1, true);
    this.C1TouchEventProvider1.Tapped += new EventHandler<TappedEventArgs>(C1TouchEventProvider1_Tapped);
}

private void C1TouchEventProvider1_Tapped(object sender, TappedEventArgs e)
{
    if (e.TargetControl != null)
    {
        Console.WriteLine("{0},{1},{2}", DateTime.Now.ToString(), e.TargetControl.Name, e.OriginalSource.Name);
        e.Handled = true;
    }
}

最大タッチ数の取得

システム上の最大タッチ数を取得するためには、C1TouchEventProvider.MaximunTouchesプロパティを使用します。

以下コードでは、Windows 8またはWindows Server 2012またはより新しいバージョンのWindowsであるかどうかを検出し、マルチタッチがサポートされているかどうかをユーザーに表示する例です。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Imports C1.Win.C1TouchToolKit

' OSがWindows 8またはServer 2012、あるいはより新しいバージョンである場合、Trueを返します。
' それ以外の場合はFalseを返します。
Private Shared Function IsWindows8()
    If Environment.OSVersion.Version.Major >= 6 AndAlso Environment.OSVersion.Version.Minor >= 2 Then
        Return True
    Else
        Return False
    End If
End Function

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    If C1TouchEventProvider.MaximunTouches < 2 AndAlso IsWindows8() = False Then
        MessageBox.Show("マルチタッチはサポートされていません。")
    Else
        MessageBox.Show("マルチタッチがサポートされています。")
    End If
End Sub

Visual Basic コードの書き方

Visual Basic
コードのコピー
using C1.Win.C1TouchToolKit;

// OSがWindows 8またはServer 2012、あるいはより新しいバージョンである場合、trueを返します。
// それ以外の場合はfalseを返します。
private static bool IsWindows8()
{
    if (Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor >= 2)
    {
        return true;
    }
    else
    {
        return false;
    }
}

private void button1_Click(object sender, EventArgs e)

{
    if (C1TouchEventProvider.MaximunTouches < 2 || IsWindows8() == false)
    {
        MessageBox.Show("マルチタッチはサポートされていません。");
    }
    else
    {
        MessageBox.Show("マルチタッチがサポートされています。");
    }
}