アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして。
Visual Basic初心者でキーハンドルについて困っています。

行いたいことは、
1.テキストボックスでctrl + space キーを押す。
2.テキストの補間を行う。

です。ですが下記のプログラムをコンパイルした時、 Sub MainTextKeyDown...の行で以下のエラーがでます。

「HANDLES 句には、それを含む型または基本型の 1 つで定義された WithEvents 変数が必要です。」

実際のプログラムです。(テキストボックスは"MainText"という名前で作成してあります。)


Public Partial Class MainForm
Public Sub New()
' The Me.InitializeComponent call is required for Windows Forms designer support.
Me.InitializeComponent()

'
' TODO : Add constructor code after InitializeComponents
'
End Sub

Sub MainFormLoad(sender As Object, e As EventArgs) Handles MyBase.Load
Me.KeyPreview = True
End Sub

Sub MainTextTextChanged(sender As Object, e As System.Windows.Forms.KeyEventArgs)

End Sub

Sub MainTextKeyDown( sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles MainText.KeyDown
If e.Control Then
If e.KeyCode = Keys.Space Then
' 補間処理
End If
End If
End Class

エラー内容は調べましたが、解決が見つかりませんでした。
まだまだ勉強したてで、単純なミスかもしれませんがよろしくお願いします。

A 回答 (1件)

まず、質問の内容とは違いますが、


提示のコードでは、最後から2行目に
 End Sub
が抜けているのでその時点でコンパイルエラーです。


>「HANDLES 句には、それを含む型または基本型の 1 つで定義された WithEvents 変数が必要です。」
http://msdn.microsoft.com/ja-jp/library/32787dt6 …
画面上のコントロールをイベントの関数と結びつけるのが HANDLES 句です。
そこでエラーが出てる事からコントロールと結びつけができていないと予想できます。
> Handles 句に WithEvents 変数が指定されませんでした。(MSDN より抜粋)
「WithEvents 変数」というのはデザイン画面でコントロールを配置した時点で
コントロール名と同じものが自動で宣言されています。(場所は InitializeComponent 内)

ここまで分かれば、エラーメッセージの通りです。デザイン画面で配置した
コントロール名が間違っているのではないでしょうか。
つまり、
>(テキストボックスは"MainText"という名前で作成してあります。)
作成したと思い込んでるだけで、スペルミス等で画面上に MainText が存在しない
(もしくはコードを書き換えて食い違っている)と思われます。

イベント関数は、基本的に、コード入力画面上部のコンボボックスを選択して
VB に自動で書かせます。
その場合、Private 宣言になると思います。また関数名のデフォルトは
「コントロール名_イベント名」です。
提示のコードは、最初から手書きか、修正されています。
初心者はそんなところでケアレスミスを犯すので、自動で書かせて動く事を
確認してから修正すべきでしょう。
    • good
    • 0
この回答へのお礼

自動で書かせることができるんですね。^^;
いままで、javaやc言語しか触ったことしかなかったので知りませんでした。

早速試してみたら、ちゃんと動きました。ありがとうございます。


あと、せっかく回答していただいた方に言葉を返すようで申し訳ないのですが

>まず、質問の内容とは違いますが、
>提示のコードでは、最後から2行目に
> End Sub
>が抜けているのでその時点でコンパイルエラーです。

とのことですが、1行目がクラスの開始
2行目がメソッドの開始なので問題ないと思います。

お礼日時:2011/11/14 19:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!