• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Overrides Sub WndProcについて)

Overrides Sub WndProcについて

このQ&Aのポイント
  • Visual Studio 2012を使用している開発環境で、TextBoxのサブクラスでProtected Overrides Sub WndProcを使った場合、入力された文字をオブジェクトに渡さない方法について教えてください。
  • ByRef m As Messageのmに対してどのようなプログラムを書けば、TextBoxに値を渡さなくできるでしょうか?m = Nothingでは無理です。
  • この先のTextBoxに値を渡さないためには、mに対して特定のプログラムを書いて文字列を代入することが必要です。具体的な方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ANo.1です。 Case &H2 _start = True Str = "" Return では?

kyokotan12
質問者

お礼

BarcodeMaster 様 本当にありがとうございました。 とても実りのあるご回答をいただけたと思っております。 ありがとうございました。

kyokotan12
質問者

補足

BarcodeMaster 様 質問にお付き合いいただき ありがとうございます。 ご指摘の箇所に Return 入れても 文字列は入ってしまいます。 ですが、どこかで Rerurnをいれれば成功するかもと思いまして、 Case Else Str = Str & Chr(m.WParam) Return ・・・・・・ここ End Select 上記に入れたところ、思ったとおりの処理になりました。 いれた部分は実際のデータ(表示されるデータ)のところでリターンで処理されなかったのかなと思った次第であります。 文字コードではない制御コードの場合は表示できないから、TextBox1には文字が行かない?(本当はいってるんですかね?)のかなと思いました。 もしかしたら、Select Case の最後に全て Return をいれればまったく文字を通さない処理になるのかと理解できた次第であります。

その他の回答 (1)

回答No.1

無視したいときには、MyBase.WndProc(m)を呼びださなければいいのではないでしょうか? WM_KEYDOWNの例は以下の通りです。 Protected Overrides Sub WndProc(ByRef m As Message) Const WM_KEYDOWN As Integer = &H100 Select Case m.Msg Case WM_KEYDOWN Return End Select MyBase.WndProc(m) End Sub

kyokotan12
質問者

補足

BarcodeMaster様、いつも大変お世話になっております。 ご回答の方、いつも大変ありがたく思っております。 詳細に質問をすれば BarcodeMaster様に煩わしい思いをさせないですんだのではないかと反省しております。 実はバーコードリーダにてSTX-ETX形式(データの前後に特殊文字がつく)でデータを読み込んでいるのですが、 バーコードの場合だけ、読み取ったデータを加工して別の文字列として、表示させたいと思っておりました。 フォームには下記のサブクラスのTextBox1 と 通常のTextBox2を配置しまして、読み込んだ時に、TextBox2 のみ読み込んだデータが表示されれば成功なのですが、TextBox1にも同じデータ表示されてしまいます。 Returnを入れている箇所が問題なのか、別の原因で表示されてしまうのかまったくわからない次第でございます。もし良策がございましたら、何卒ご教授いただけますようよろしくお願い致します。 Public Class TESTTextBox Inherits System.Windows.Forms.TextBox Private _start As Boolean = False Friend Str As String = "" Protected Overrides Sub WndProc(ByRef m As Message) Const WM_CHAR As Integer = &H102 If m.Msg = WM_CHAR Then Select Case m.WParam Case &H2 _start = True Str = "" Case &H3 If _start Then f_TEST.TextBox2.Text = Str Str = "" End If _start = False Return Case Else Str = Str & Chr(m.WParam) End Select End If MyBase.WndProc(m) End Sub End Class

関連するQ&A