locked
MouseEventArgs.GetPosition 以外のマウス位置の取得方法 RRS feed

  • 質問

  • Veneficus と申します。よろしく、お願いいたします。

    RoutedEvent を使用したドラッグ&ドロップ時に、マウス位置のUIElement に対する位置が取得できずに困っています。
    通常の MouseEventArgs であれば、取得したい対象のコンポーネントを e.GetPosition(取得したいElement) とすることで、ドロップ対象となるコンポーネントに対する位置が取得できるのですが、それ以外にコンポーネントに対する位置を取得する方法はないでしょうか。

    System.Windows.Forms.Control.PointToClient に相当する機能があれば助かります。
    それでは。
    2009年8月20日 11:20

回答

  •  Veneficus です。

     直接的に取得する方法がなかったため、以下のような形で対応いたしました。一応参考までにここに記述します。

     幸いなことに、ドラッグ&ドロップする別コンポーネント側からマウス情報を取得することが可能でした。
     そこで、ドロップ対象となるコンポーネントのバウンダリーを取得することで、コントロールがどの位置にあるかを調べ、座標の差をとってドロップ対象からの相対位置を計算しました。

     それでは。
    • 回答としてマーク Veneficus 2009年8月31日 2:36
    2009年8月31日 2:36

すべての返信

  •  Veneficus です。

     直接的に取得する方法がなかったため、以下のような形で対応いたしました。一応参考までにここに記述します。

     幸いなことに、ドラッグ&ドロップする別コンポーネント側からマウス情報を取得することが可能でした。
     そこで、ドロップ対象となるコンポーネントのバウンダリーを取得することで、コントロールがどの位置にあるかを調べ、座標の差をとってドロップ対象からの相対位置を計算しました。

     それでは。
    • 回答としてマーク Veneficus 2009年8月31日 2:36
    2009年8月31日 2:36
  • e.GetPositionの引数を変えればいいだけなのでは?
    2009年8月31日 6:38
  • ritto さん、こんにちは。

    RoutedEventArgs の場合、GetPosition メソッドが存在していません。

    そのため、要素に対するマウスイベントは伝達できるのですが、その要素中の(たとえば Canvas の)どこにイベントが発生したのかを取得したかった訳です。
    自前で Drag&Drop を作成しているわけでなく、市販コンポーネントのDrag&Dropを使用していたので、幸いマウスのイベント発生位置(ドラッグ開始とドラッグ終了)は取れたのですが、そのイベント引数が MouseEventArgs の親クラスである RoutedEventArgs から派生していたため、GetPosition メソッドが利用できませんでした。
    2009年9月7日 5:09