none
標準コントロールにタッチアップ、タッチダウンのイベントを加えたい RRS feed

  • 質問

  • お世話になっております。

    VBの標準のコントロール(ラベル、コントロール)にタッチ機能(タッチアップ、タッチダウン)を加えたコントロールを作らなければならなくなりました。

    理由はwin8だと液晶にタッチした時のイベント=mouseDown、離した時のイベント=mouseupとはならないようなのです。

    作り方がよくわからず、いろいろと調べてはいるのですが、これはWPFというものを使わなくては作れないのでしょうか?

    また、UIElementクラスのイベントにTouchdown、Touchupイベントというものがあり、これをどうにかコントロールに取り込めないか見よう見まねで下記のプログラムを作成したのですが、RaiseEvent  myUIelement.TouchDown、TouchUpのところで、class1にはそんなイベントはありません。というエラーメッセージがでてきてうまくいきません。WPFを使わずにできるよというのであれば、こちらのプログラムでご教授をお願いします。開発環境はvisual studio2012プロフェッショナルです。

    Public Class Class1
        Inherits Button

        Private myUIelement As System.Windows.UIElement

        Public Event TouchDown As EventHandler
        Public Event TouchUp As EventHandler

        Public Sub New()

            myUIelement = New System.Windows.UIElement

            AddHandler myUIelementTouchDown, New System.EventHandler(Of System.Windows.Input.TouchEventArgs)(AddressOf Me.testTouchDown)

    AddHandler myUIelement.TouchUp, New System.EventHandler(Of System.Windows.Input.TouchEventArgs)(AddressOf Me.testTouchUp)

    End Sub

        Private Sub testTouchDown()

            MsgBox("TouchDown")
            Me.OnTouchDown(EventArgs.Empty)

        End Sub

        Private Sub testTouchUp()

            MsgBox("TouchUp")
            Me.OnTouchUp(EventArgs.Empty)
        End Sub

        Protected Overridable Sub OnTouchDown(ByVal ex As EventArgs)

            RaiseEvent  myUIelement.TouchDown.(Me, ex)

        End Sub

        Protected Overridable Sub OnTouchUp(ByVal ex As EventArgs)

            RaiseEvent  myUIelement.Touchup(Me, ex)

        End Sub

    End Class

    2014年6月7日 1:06

すべての返信

  • Win32APIの呼び出しやメッセージ処理が必要になります。

    まあ以下のページなんかを見ればほぼそのまま使えると思いますが。

    APIのGetTouchInputInfoについて  - DOBON.NETプログラミング道掲示板

    2014年6月7日 2:16
  • 返信どうもありがとうございます。

    見る限りだとそのままいけそうですね。

    家にタッチパネルがないので、月曜日に動かしてみます。

    何かありましたら質問いたします。

    ちなみにこのプログラムの作成者様でしょうか?

    2014年6月7日 11:13
  • VBの標準のコントロール(ラベル、コントロール)にタッチ機能(タッチアップ、タッチダウン)を加えたコントロールを作らなければならなくなりました。
    理由はwin8だと液晶にタッチした時のイベント=mouseDown、離した時のイベント=mouseupとはならないようなのです。

    手元のSurfaceProで確認しましたが、Hongliangさんの挙げたようなコーディングをせずとも標準状態でMouseDown / MouseUpイベントは発生しています。何か確認方法に問題があるのではないでしょうか?

    また目的がよくわからないのですが、タッチを検出して何をしたいのでしょうか?

    2014年6月7日 13:21
  • 返信ありがとうございます。

    MouseDown / MouseUpイベントは発生しています。

    タッチでコントロール(ボタン、ラベル)を押しっぱなしにした場合、マウスダウンイベントは発生しますか?

    また目的がよくわからないのですが、タッチを検出して何をしたいのでしょうか?

    ラベルに画像を登録→ラベルを押しっぱなしにしたときに画像を変更→タッチを離す→音を鳴らしてボタンの処理を行うというコントロールを作成したいのです。

    特に何かしたいというわけではなく、仕事でアプリケーションの一部として作らなければならないのです。

    なお、このコントロールの動作環境はタッチパネルのみの環境です。

    マウス、キーボードは使えません。


    2014年6月7日 15:21
  • タッチでコントロール(ボタン、ラベル)を押しっぱなしにした場合、マウスダウンイベントは発生しますか?

    発生しますがそれが何か…?

    ちなみにタッチには単なるタップだけでなく様々なジェスチャーがあります。 TouchDown / TouchUp だけイベントを発生させても意味がありません。…と書こうと思っていました。しかし、今回の返信で求められているのは「Press and Hold」だけだとわかり、「Tap」と「Press and Hold」についてはWindows側の互換機能でMouseDown / MouseUpイベントに変換されているわけで、質問者さんが何を質問しようとしているのかわからなくなりました。

    もし発生しないということであればコントロールパネルの「ペンとタッチ」を確認してください。しかし、発生させないもしくはPress時間が長く設定されている等であれば、それは設定した人の意志ですから尊重すべきであり、無理にタッチイベントを解釈してまで動作すべきではないでしょう。

    2014年6月7日 23:38
  • お世話になっております。

    設定等はデフォルトのままです。

    現在mousedownイベントにて画像を変更する処理をいれています。

    当方のタッチパネル、アプリが動く本番環境では、ボタンを押しっぱなしにしてもmousedownイベントが発生しません。

    押しっぱなしにしてもすぐに画像が変わらないのです。

    ちなみにこのアプリは作って5年ぐらいたつみたいなのですが、旧環境ではそのようなことはなかったようです。

    仕様書にはそのようなことが起こるので、処理を変更してほしいと記載されています。

    2014年6月8日 17:00