トップ回答者
Form2がアクティブなとき、From1のToolStripButtonをクリックしてもClickイベントが発生しない。

質問
-
今まで、Buttonでしていたことを、ToolStripButtonでしようとしましたが、
Form1とForm2の二つのフォームを開いていて、Form2がアクティブなとき、
Form1のToolStripButtonをクリックすると一回目でForm1にフォーカスが移り、
二回目でClickイベントが発生します。
Buttonの場合は、一回のクリックだけで、フォーカスの移動とClickイベントの発生が
起こります。
ToolStripButtonでも同じ動作にする方法はないでしょうか。
ToolStripButtonのMouseEnterイベントでフォーカス移動する方法を考えていますが、
ほかの方法があれば教えてくださいませ。
回答
-
すみません。やっぱり勘違いでした。
お詫びとしてクリックしたようになるコードを考えました。
ToolStripButton をクリックした時にフォームがアクティブになるだけなので、そのアクティブ時にクリック処理を入れてみました。
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
' 座標からの ToolStripItem を取得
Dim p As Point = Me.ToolStrip1.PointToClient(System.Windows.Forms.Cursor.Position)
Dim tsi As ToolStripItem = Me.ToolStrip1.GetItemAt(p.X, p.Y)
If tsi Is Me.ToolStripSplitButton1 Then
' ボタン領域を取得
Dim bounds As New Rectangle( _
Me.ToolStripSplitButton1.Bounds.X, _
Me.ToolStripSplitButton1.ButtonBounds.Y, _
Me.ToolStripSplitButton1.ButtonBounds.Width, _
Me.ToolStripSplitButton1.ButtonBounds.Height _
)
If bounds.Contains(p) = True Then
' ボタン領域
Me.ToolStripSplitButton1.PerformButtonClick()
Else
' ドロップダウン領域
Me.ToolStripSplitButton1.ShowDropDown()
End If
End If
End Sub
すべての返信
-
-
すみません。やっぱり勘違いでした。
お詫びとしてクリックしたようになるコードを考えました。
ToolStripButton をクリックした時にフォームがアクティブになるだけなので、そのアクティブ時にクリック処理を入れてみました。
Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
' 座標からの ToolStripItem を取得
Dim p As Point = Me.ToolStrip1.PointToClient(System.Windows.Forms.Cursor.Position)
Dim tsi As ToolStripItem = Me.ToolStrip1.GetItemAt(p.X, p.Y)
If tsi Is Me.ToolStripSplitButton1 Then
' ボタン領域を取得
Dim bounds As New Rectangle( _
Me.ToolStripSplitButton1.Bounds.X, _
Me.ToolStripSplitButton1.ButtonBounds.Y, _
Me.ToolStripSplitButton1.ButtonBounds.Width, _
Me.ToolStripSplitButton1.ButtonBounds.Height _
)
If bounds.Contains(p) = True Then
' ボタン領域
Me.ToolStripSplitButton1.PerformButtonClick()
Else
' ドロップダウン領域
Me.ToolStripSplitButton1.ShowDropDown()
End If
End If
End Sub