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

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

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

マウスクリックとホイールを無効化する方法

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

■92887 / inTopicNo.1)  マウスクリックとホイールを無効化する方法
  
□投稿者/ yapoo (1回)-(2019/11/05(Tue) 17:04:48)

分類:[.NET 全般] 

Cursor = Cursors.WaitCursor

とすることで、マウスカーソルを待機状態に変更することができます。
この状態の時に、
マウスでコントロールをクリックやホイールを回しても
コントロールの内容を変更できなくしたいのですが、
どのようにすれば良いですか?

一つ一つコントロール毎に、
マウスクリックイベントとホイールイベントを書いていくのは
非常に面倒なので
一括で書きたいのですが
どのようにすれば良いでしょうか?

引用返信 編集キー/
■92888 / inTopicNo.2)  Re[1]: マウスクリックとホイールを無効化する方法
□投稿者/ 魔界の仮面弁士 (2458回)-(2019/11/05(Tue) 17:14:01)
No92887 (yapoo さん) に返信
> Cursor = Cursors.WaitCursor

という事は、WPF や ASP.NET WebForms ではなく、WinForms での開発ですね。
行末セミコロンも無いので VB かな。


> マウスでコントロールをクリックやホイールを回しても
> コントロールの内容を変更できなくしたいのですが、
> どのようにすれば良いですか?

マウス、タッチ、スタイラス、キーボード等々、
すべての入力をブロックしてもよいのなら、
親フォームまるごと使用不可にしてしまうとか。

Me.Enabled = False
引用返信 編集キー/
■92889 / inTopicNo.3)  Re[2]: マウスクリックとホイールを無効化する方法
□投稿者/ yapoo (2回)-(2019/11/05(Tue) 17:22:02)
ありがとうございます。

確かにこの方法でもできるのですが、
ウインドウフォームの外観を変えずに
マウス(とキーボード)の操作を無効化したいのですが
このようなことは可能でしょうか?

引用返信 編集キー/
■92895 / inTopicNo.4)  Re[3]: マウスクリックとホイールを無効化する方法
□投稿者/ 774RR (745回)-(2019/11/06(Wed) 08:28:14)
> ウインドウフォームの外観を変えずにマウス(とキーボード)の操作を無効化
すると通常のユーザーは大いに戸惑うと思うのだけど。

あれ?このアプリ死んでる!しょうがない、タスクマネージャで抹消するか。はお望みの動作?

引用返信 編集キー/
■92896 / inTopicNo.5)  Re[4]: マウスクリックとホイールを無効化する方法
□投稿者/ yapoo (3回)-(2019/11/06(Wed) 09:58:27)
No92895 (774RR さん) に返信
>>ウインドウフォームの外観を変えずにマウス(とキーボード)の操作を無効化
> すると通常のユーザーは大いに戸惑うと思うのだけど。
>
> あれ?このアプリ死んでる!しょうがない、タスクマネージャで抹消するか。はお望みの動作?
>

カーソルを待機状態に変えてあるのでそこは問題ありません。
Cursor = Cursors.WaitCursor

引用返信 編集キー/
■92898 / inTopicNo.6)  Re[3]: マウスクリックとホイールを無効化する方法
□投稿者/ 魔界の仮面弁士 (2461回)-(2019/11/06(Wed) 10:22:33)
No92889 (yapoo さん) に返信
> ウインドウフォームの外観を変えずに
> マウス(とキーボード)の操作を無効化したいのですが
> このようなことは可能でしょうか?

手抜きですが、それっぽい画像に差し替えてしまうのはどうでしょう?


フォームの階層構成を
 Form1
 ├Panel1
 │├他のコントロール
 │└他のコントロール
 └PictureBox1
ようにしておいて…。


普段の状態:
 ・Panel1 は「最背面」「Visible = True」「Dock = Fill」
・PictureBox1 は「再前面」「Visible = False」「Dock = Fill」
ロックする場合:
 ・Graphics.CopyFromScreen で撮影したフォーム画像を PictureBox1.Image に割り当て
 ・Cursors.WaitCursor を適用
 ・コンテナの Visible を反転させ、Panel1.Visible = False、PictureBox1.Visible = True に。
とする感じで。


それでも、考えるべき点はいろいろありますが…。

複数のフォームがあったらその都度処理しなければいけないとか、
無効化中の画面更新(時計やGIFアニメ等)に対応できないとか、
AutoScroll なフォームをどうするかとか、
半透明ウィンドウの場合はどうするのかとか、
無効化中の親フォームの移動や終了を許可するか否かとか。
引用返信 編集キー/
■92901 / inTopicNo.7)  Re[1]: マウスクリックとホイールを無効化する方法
□投稿者/ にゃるら (5回)-(2019/11/06(Wed) 15:16:49)
No92887 (yapoo さん) に返信
> Cursor = Cursors.WaitCursor
>
> とすることで、マウスカーソルを待機状態に変更することができます。
> この状態の時に、
> マウスでコントロールをクリックやホイールを回しても
> コントロールの内容を変更できなくしたいのですが、
> どのようにすれば良いですか?
>
> 一つ一つコントロール毎に、
> マウスクリックイベントとホイールイベントを書いていくのは
> 非常に面倒なので
> 一括で書きたいのですが
> どのようにすれば良いでしょうか?
>

SetWindowsHookExでWH_MOUSEを指定するとか?(キーボード以外は試してないのでうまくいくかはわかりませんが)
引用返信 編集キー/
■92908 / inTopicNo.8)  Re[1]: マウスクリックとホイールを無効化する方法
□投稿者/ KOZ (28回)-(2019/11/07(Thu) 10:44:14)
2019/11/07(Thu) 10:45:05 編集(投稿者)
2019/11/07(Thu) 10:44:39 編集(投稿者)

■No92887 (yapoo さん) に返信
> 一つ一つコントロール毎に、
> マウスクリックイベントとホイールイベントを書いていくのは
> 非常に面倒なので
> 一括で書きたいのですが
> どのようにすれば良いでしょうか?

メッセージフィルタを登録してマウスに関するメッセージを無視することができます。


Private Class MouseMessageFilter
    Implements IMessageFilter

    Const WM_MOUSEFIRST As Integer = &H200
    Const WM_MOUSELAST As Integer = &H20E

    Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean _
            Implements IMessageFilter.PreFilterMessage
        Select Case m.Msg
            Case WM_MOUSEFIRST To WM_MOUSELAST
                Return True
            Case Else
                Return False
        End Select
    End Function
End Class

Dim mouseFilter As New MouseMessageFilter()

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Application.AddMessageFilter(mouseFilter)
    Me.Cursor = Cursors.WaitCursor
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Application.RemoveMessageFilter(mouseFilter)
    Me.Cursor = Cursors.Default
End Sub

引用返信 編集キー/
■92912 / inTopicNo.9)  Re[2]: マウスクリックとホイールを無効化する方法
□投稿者/ yapoo (4回)-(2019/11/07(Thu) 14:22:37)
これでした
素晴らしいです
うまくいきました
どうもありがとうございました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ