C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: フォームのToolStripMenuをクリックせずに開きたい


(過去ログ 88 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■52594 / inTopicNo.1)  フォームのToolStripMenuをクリックせずに開きたい
  
□投稿者/ こちこち (1回)-(2010/08/17(Tue) 10:39:05)

分類:[VB.NET/VB2005 以降] 

フォームにToolStripMenuがありますが、メニューにカーソルがいくと、クリックせずともメニューを開きたいのですが、どうすれば良いでしょうか?
プロパティを定義するのでしょうか?それとも下の様なMouseMoveに開くコードを記述するのでしょうか?

Private Sub ToolStripMenuItem1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ToolStripMenuItem1.MouseMove

End Sub
引用返信 編集キー/
■52597 / inTopicNo.2)  Re[1]: フォームのToolStripMenuをクリックせずに開きたい
□投稿者/ こちこち (2回)-(2010/08/17(Tue) 12:57:54)
メニューにマウスが移動すると、メニューが表示するのは、下の物で実現出来ました。
Public Class Form1
Private Sub ToolStripMenuItem1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ToolStripMenuItem1.MouseMove
ToolStripMenuItem1.ShowDropDown()
End Sub
End Class
メニューを表示したまま、フォーム以外の例えばWindowsデスクトップをクリックすると、メニューが
消えて欲しいのですが、一度は、消えますが、二度以後は消えません。
MouseLeaveとか色々試したのですが、うまく出来ませんので宜しくお願い致します。
引用返信 編集キー/
■52608 / inTopicNo.3)  Re[2]: フォームのToolStripMenuをクリックせずに開きたい
□投稿者/ やじゅ (1703回)-(2010/08/17(Tue) 23:52:41)
やじゅ さんの Web サイト
No52597 (こちこち さん) に返信

MenuStripコントロールの場合
http://dobon.net/vb/dotnet/control/menuitemselect.html

メニューをマウスで選択すると、下位メニューが表示されます。
タイマーを使ってフォーム外になると、下位メニューを非表示にします。

    'フォームのLoadイベントハンドラ
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        'イベントハンドラの追加
        AddHandler Menu1ToolStripMenuItem.Paint, AddressOf menu1ToolStripMenuItem_Paint
        AddHandler Menu2ToolStripMenuItem.Paint, AddressOf menu1ToolStripMenuItem_Paint
    End Sub

    'ToolStripMenuItemのPaintイベントハンドラ
    Sub menu1ToolStripMenuItem_Paint(ByVal sender As Object, ByVal e As PaintEventArgs)
        Dim item As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
        If item.Selected Then
            item.ShowDropDown()
        End If
    End Sub

    'Timerイベントハンドラ
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'マウスがフォーム外かチェック
        If Me.Bounds.IntersectsWith(New Rectangle(Form1.MousePosition.X, Form1.MousePosition.Y, 0, 0)) = False Then
            For Each item As ToolStripMenuItem In MenuStrip1.Items
                item.HideDropDown()
            Next
        End If
   End Sub

引用返信 編集キー/
■52619 / inTopicNo.4)  Re[3]: フォームのToolStripMenuをクリックせずに開きたい
□投稿者/ こちこち (3回)-(2010/08/18(Wed) 14:13:04)
No52608 (やじゅ さん) に返信
大変有り難う御座います。初心者の為教えて頂いた物を動かすだけで大変時間がかかりましたが
希望通りマウスを持って行くだけで、下位階層のメニューが表示され、フォーム外になると
メニューが消される事が確認出来ました。
大変すみませんが、フォームが特殊で、フォーム上にメニューが横に並んでいるだけで、
メニューの下には何も無い横長バーだけのフォームなので、メニューを出しても
下層メニューを選択中に、マウスがフォーム外と判断されます。メニュー上にマウスがいるとでも
判断出来るのでしょうか?

引用返信 編集キー/
■52649 / inTopicNo.5)  Re[4]: フォームのToolStripMenuをクリックせずに開きたい
□投稿者/ やじゅ (1705回)-(2010/08/19(Thu) 01:40:58)
やじゅ さんの Web サイト
No52619 (こちこち さん) に返信
> 大変すみませんが、フォームが特殊で、フォーム上にメニューが横に並んでいるだけで、
> メニューの下には何も無い横長バーだけのフォームなので、メニューを出しても
> 下層メニューを選択中に、マウスがフォーム外と判断されます。メニュー上にマウスがいるとでも
> 判断出来るのでしょうか?

現在はフォームサイズで判断しているので、メニューがフォームからはみ出す場合には対応していないですね。
で、子階層までなら下記の修正で出来ますが、孫階層まで判断するとなると、ちと面倒そうです。

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    'マウスがフォーム外かチェック
        If Me.Bounds.IntersectsWith(New Rectangle(Form1.MousePosition.X, Form1.MousePosition.Y, 0, 0)) = False Then
            For Each item As ToolStripMenuItem In MenuStrip1.Items
                If item.DropDown.IsDropDown = True Then
                    If item.DropDown.Bounds.IntersectsWith(New Rectangle(Form1.MousePosition.X, Form1.MousePosition.Y, 0, 0)) = False Then
                        item.HideDropDown()
                    End If
                End If
            Next
        End If
    End Sub
 

引用返信 編集キー/
■52653 / inTopicNo.6)  Re[5]: フォームのToolStripMenuをクリックせずに開きたい
□投稿者/ こちこち (4回)-(2010/08/19(Thu) 09:27:31)
2010/08/19(Thu) 09:27:55 編集(投稿者)

No52649 (やじゅ さん) に返信
やじゅさん大変お世話になります。希望通りに動作出来ました、有り難う御座いました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -