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

わんくま同盟

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

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

ツリー一括表示

NumericUpDownの右クリックメニューを非表示にする /ゴラリ (18/06/30(Sat) 18:02) #87794
Re[1]: NumericUpDownの右クリックメニューを非表示にする /Hongliang (18/06/30(Sat) 18:36) #87795
  └ Re[2]: NumericUpDownの右クリックメニューを非表示にする /ゴラリ (18/06/30(Sat) 19:29) #87796
    └ Re[3]: NumericUpDownの右クリックメニューを非表示にする /Hongliang (18/07/01(Sun) 10:11) #87797
      └ Re[4]: NumericUpDownの右クリックメニューを非表示にする /ゴラリ (18/07/01(Sun) 14:22) #87798 解決済み


親記事 / ▼[ 87795 ]
■87794 / 親階層)  NumericUpDownの右クリックメニューを非表示にする
□投稿者/ ゴラリ (1回)-(2018/06/30(Sat) 18:02:04)

分類:[.NET 全般] 

VB.NET2017を使っています。


NumericUpDownの右クリックメニューを非表示にしたいのですが
どのようにすれば良いでしょうか?

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=39688&forum=7

ここに質問ページがあるのですが
メッセージフックを使えば良い、とは書かれてあるものの
どのようにすれば良いか分かりません。
どなたか助言ください。









[ □ Tree ] 返信 編集キー/

▲[ 87794 ] / ▼[ 87796 ]
■87795 / 1階層)  Re[1]: NumericUpDownの右クリックメニューを非表示にする
□投稿者/ Hongliang (654回)-(2018/06/30(Sat) 18:36:54)
それの2ページ目に書かれてるようですが。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=39688&forum=7&start=8

私なら、
class NoContextMenuWindow : NativeWindow {
	public HookWindow(Control ctrl) {
		this.AssignHandle(ctrl.Handle);
	}
	protected override void WndProc(ref Message m) {
		if (m.Msg == 0x7b) {    // WM_CONTEXTMENU
			m.Result = IntPtr.Zero;
			return;
		}
		base.WndProc(ref m);
	}
}
こんな感じのクラス作って
NoContextMenuWindow m_Window; // Form1のメンバ変数
void Form1_Load(object sender, EventArgs e) {
	Control tb = this.Controls.OfType<TextBox>().First();
	m_Window = new NoContextMenuWindow(tb);
}
こうするかな。
// 必要ならWebに転がっている適当なC#/VB変換サービスをご利用ください。

[ 親 87794 / □ Tree ] 返信 編集キー/

▲[ 87795 ] / ▼[ 87797 ]
■87796 / 2階層)  Re[2]: NumericUpDownの右クリックメニューを非表示にする
□投稿者/ ゴラリ (3回)-(2018/06/30(Sat) 19:29:47)
ありがとうございます。
二ページ目があることに気がつきませんでした。
そのコードを試してみたのですが
なぜかうまくいきませんでした。
特にエラーはありませんが、普通にコンテキストメニューが表示されてしまいます。

提示してくださったコードをVBに翻訳してみましたが
エラーが出ておりうまくいきません

Class NoContextMenuWindow
Inherits NativeWindow
End Class
UnknownDim j As S
Dim cf As Xn


Protected Overrides Sub WndProc(ByRef m As Message)
If (m.Msg = 123) Then
' WM_CONTEXTMENU
m.Result = IntPtr.Zero
Return
End If

MyBase.WndProc(m)
End Sub

Private m_Window As NoContextMenuWindow

' Form1n&#65533;&#65533;&#65533; p
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim tb As Control = Me.Controls.OfType.First
m_Window = New NoContextMenuWindow(tb)
End Sub


どうすれば良いですか?

[ 親 87794 / □ Tree ] 返信 編集キー/

▲[ 87796 ] / ▼[ 87798 ]
■87797 / 3階層)  Re[3]: NumericUpDownの右クリックメニューを非表示にする
□投稿者/ Hongliang (655回)-(2018/07/01(Sun) 10:11:41)
2018/07/01(Sun) 13:36:17 編集(投稿者)
あー、写す際にちょっと手修正したらコーディングミスが出てしまいましたね。

class NoContextMenuWindow
  Inherits NativeWindow
  Public Sub New(ByVal ctrl As Control)
    Me.AssignHandle(ctrl.Handle)
  End Sub
  Protected Overrides Sub WndProc(ByRef m As Message)
    If m.Msg = &H7b Then ' WM_CONTEXTMENU
      m.Result = IntPtr.Zero
      Return
    End If
    MyBase.WndProc(m)
  End Sub
End Class

Private m_Window As NoContextMenuWindow
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
  Dim tb As TextBox = Me.NumericUpDown1.Controls.OfType(Of TextBox)().First()
  Me.m_Window = New NoContextMenuWindow(tb)
End Sub

// IfにThenが抜けてたので追加 あれー、なくてもコンパイル通るんだ…。

[ 親 87794 / □ Tree ] 返信 編集キー/

▲[ 87797 ] / 返信無し
■87798 / 4階層)  Re[4]: NumericUpDownの右クリックメニューを非表示にする
□投稿者/ ゴラリ (4回)-(2018/07/01(Sun) 14:22:13)
ありがとうございます。

うまくいきました。

解決済み
[ 親 87794 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -