none
vb2017  クロスカーソルで指示される位置は左上?クロスした点 RRS feed

  • 質問

  • Win10+vb2017 初心者

    カーソルを中心とする範囲を上下、左右方向に指定したい。通常の矢印では矢印先端がカーソル位置として取得できると思いますが、 クロスカーソルの場合は囲んだ正方形の左上でしょうか。それともクロスした点でしょうか?

    2018年3月10日 23:32

回答

  • Cursors.Cross であればクロスした点です。

    フォームの Cursor プロパティを Cross にして、MouseMove イベントで e.Location をフォームのタイトルに表示するといった実験をすると確かめることができます。

    • 回答としてマーク azumao 2018年3月12日 2:48
    2018年3月11日 0:08
    モデレータ

すべての返信

  • Cursors.Cross であればクロスした点です。

    フォームの Cursor プロパティを Cross にして、MouseMove イベントで e.Location をフォームのタイトルに表示するといった実験をすると確かめることができます。

    • 回答としてマーク azumao 2018年3月12日 2:48
    2018年3月11日 0:08
    モデレータ
  • Hotspotプロパティで位置が取れます。マウスで得られる位置はそのHotspotが重なっている位置となります。

    Public Class Form1
        Sub New()
    
            ' この呼び出しはデザイナーで必要です。
            InitializeComponent()
    
            ' InitializeComponent() 呼び出しの後で初期化を追加します。
            Dim dic As New Dictionary(Of String, Cursor)
            Dim combo As New ComboBox
            Dim label As New Label With {.Top = combo.Height, .Font = New Font(Me.Font.FontFamily, 30.0), .AutoSize = True}
    
            AddHandler combo.SelectedIndexChanged, Sub(s, e)
                                                       Me.Cursor = dic.Item(DirectCast(combo.SelectedItem, String))
    
                                                       Dim size As Size = Me.Cursor.Size
                                                       Dim hotspot As Point = Me.Cursor.HotSpot
                                                       label.Text = String.Format($"Size={size.Width},{size.Height}{vbNewLine}Hotspot={hotspot.X},{hotspot.Y}")
    
                                                   End Sub
            Me.Controls.Add(combo)
            Me.Controls.Add(label)
    
    
            For Each pi As System.Reflection.PropertyInfo In GetType(Cursors).GetProperties()
                Dim cur As Cursor = TryCast(pi.GetValue(Nothing), Cursor)
                dic.Add(pi.Name, cur)
                combo.Items.Add(pi.Name)
            Next
    
    
        End Sub
    
    End Class


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2018年3月11日 0:23
    2018年3月11日 0:21
  • ありがとうございました。安心しました。
    2018年3月12日 2:48
  • ありがとうございました。確認してみます。
    2018年3月12日 2:50