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

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

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

CheckBoxで右クリックを使う方法

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

■90620 / inTopicNo.1)  CheckBoxで右クリックを使う方法
  
□投稿者/ 未来 (1回)-(2019/03/25(Mon) 12:16:57)

分類:[.NET 全般] 

CheckBoxで左クリックと右クリックに別の動作を割り当てたいと考えています。

通常のコントロールだと

Private Sub xxx_MouseClick(sender As Object, e As MouseEventArgs) Handles xxx.MouseClick

Select Case e.Button

Case Windows.Forms.MouseButtons.Left

Case Windows.Forms.MouseButtons.Right

End Select

End Sub


のようにしてクリックした時に左クリックと右クリックを分岐させることができます。

一方で、同じことをCheckBoxでやろうとすると


Private Sub CheckBox_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.MouseClick

End Sub

引数eの型宣言がSystem.EventArgsでないと
エラーとなるため、
e.Buttonの内容を調べることができません。

そのため、右クリックを取得することができません。


どのようにすれば良いでしょうか?


引用返信 編集キー/
■90621 / inTopicNo.2)  Re[1]: CheckBoxで右クリックを使う方法
□投稿者/ WebSurfer (1801回)-(2019/03/25(Mon) 12:26:22)
No90620 (未来 さん) に返信

何を作っているのでしょう? Windows Forms? WPF? ASP.NET Web Forms?

CheckBox コントロールというのは上記のいずれにもあります。
引用返信 編集キー/
■90622 / inTopicNo.3)  Re[2]: CheckBoxで右クリックを使う方法
□投稿者/ PANG2 (275回)-(2019/03/25(Mon) 13:10:48)
System.Windows.Forms.CheckBox
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.checkbox

の話であれば、

MouseClick
マウスでコントロールをクリックしたときに発生します。 (Inherited from Control)

とあるので他のコントロールと一緒のはずです。
引用返信 編集キー/
■90623 / inTopicNo.4)  Re[3]: CheckBoxで右クリックを使う方法
□投稿者/ 未来 (2回)-(2019/03/25(Mon) 13:26:57)
Windows Formsです。
他のコントロールだと
e As MouseEventArgs

でいけるのですが、
Checkboxだけは
e As EventArgs
にしないといけないのですが、
とりあえずmousedownを使えば所望することはできましたが
これは仕様なのでしょうか?

引用返信 編集キー/
■90624 / inTopicNo.5)  Re[1]: CheckBoxで右クリックを使う方法
□投稿者/ 魔界の仮面弁士 (2132回)-(2019/03/25(Mon) 13:27:42)
No90620 (未来 さん) に返信
> CheckBoxで左クリックと右クリックに別の動作を割り当てたいと考えています。

一瞬、変わった操作方法だと思ってしまいましたが、よく考えたらそうでも無いのかな…。
Excel に貼った CheckBox でも、左クリックでチェック、右クリックでコントロール選択になったりしますしね。


マウス以外(たとえば Space キーなど)の操作をどう扱いたいのかは気になるところですが。

> Private Sub CheckBox_MouseClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.MouseClick
>  Select Case e.Button
>   Case Windows.Forms.MouseButtons.Left
> 引数eの型宣言がSystem.EventArgsでないと
> エラーとなるため、

どういうエラーになりますか?

System.Windows.Forms.CheckBox の MouseClick イベントは
(sender As Object, e As MouseEventArg) のはずなんですが…。


ただいずれにせよ、MouseClick では右クリックを拾えないので、
MouseDown/MouseUp に切り替える必要がありそうです。


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  CheckBox1.ThreeState = False
  CheckBox1.AutoCheck = False
End Sub
Private Sub CheckBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles CheckBox1.MouseUp
  If New Rectangle(Point.Empty, CheckBox1.Size).Contains(e.Location) Then
    CheckBox1.Checked = Not CheckBox1.Checked
    CheckBox1.Text = e.Button.ToString()
  End If
End Sub
引用返信 編集キー/
■90625 / inTopicNo.6)  Re[1]: CheckBoxで右クリックを使う方法
□投稿者/ shu (1169回)-(2019/03/25(Mon) 13:29:15)
2019/03/25(Mon) 16:14:42 編集(投稿者)

No90620 (未来 さん) に返信

CheckBoxでは右クリック時にMouseClickが発生しないので
MouseDown, MouseUpにて実装する必要があるかと思います。
または
特殊な方法としてはメニューが空のContextMenuStripを用意して
CheckBoxのコンテキストメニューに設定し
ContextMenuStripのOpeningイベントが発生したら右クリック扱いとするなど。
引用返信 編集キー/

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


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

このトピックに書きこむ