DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Formに張り付けたユーザーコントロールのカーソルキーKeyDownを補足

環境/言語:[VB2008 win7 ]
分類:[.NET]

こんにちは。

フォームにテキストボックスなどを設置した中にラジオボタンを並べたユーザーコントロール(Hoge(ラジオボタン1=RB1,ラジオボタン2=RB2,ラジオボタン3=RB3))を設置しています。

このユーザーコントロール上のカーソルキーを補足し、RB1のとき←キーを押したら左側に設置したテキストボックスなどのコントロールに移動させたいのですがどのようにカーソルキーイベントを補足してあげたらいいのか分かりません。

お知恵をお貸しください。
■No31650に返信(みかづきさんの記事)
> このユーザーコントロール上のカーソルキーを補足し、RB1のとき←キーを押したら左側に設置したテキストボックスなどのコントロールに移動させたいのですがどのようにカーソルキーイベントを補足してあげたらいいのか分かりません。

KeyDown、KeyPress イベントというものがあります (OnKey~ で行うべきかもしれません)。
みかづきさんの言う、ユーザーコントロールとは、複合コントロールのコンテナのことだと思いますが、その場合はユーザーコントロール側で捕捉を行うようにしてください。

Form 側でも関知できますが、ユーザーコントロール側で行うのがモジュールとしての正しいアーキテクチャです。
じゃんぬねっとさんありがとうございました。

以下のようにしてみることで解決しました。
何かアドバイスがあればお願いします。(Return でキーイベントを戻す処理が抜けています。)

Public Class UserControl1

Dim objjj As String

Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
Select Case keyData
Case Keys.Up
If objjj = "Form1" Then
Form1.ActiveControl = Form1.TextBox3
End If

End Select
Return True

End Function




Private Sub UserControl1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

objjj = Me.Parent.Text
End Sub

End Class
■No31655に返信(みかづきさんの記事)
> じゃんぬねっとさんありがとうございました。
>
> 以下のようにしてみることで解決しました。
> 何かアドバイスがあればお願いします。(Return でキーイベントを戻す処理が抜けています。)
>
> Public Class UserControl1
>
> Dim objjj As String
>
> Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
> Select Case keyData
> Case Keys.Up
> If objjj = "Form1" Then
> Form1.ActiveControl = Form1.TextBox3
> End If
>
> End Select
> Return True
>
> End Function
>
>
>
>
> Private Sub UserControl1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
>
> objjj = Me.Parent.Text
> End Sub
>
> End Class

Form1 のようにユーザーコントロール外で何かをする場合は、ユーザーコントロールはその任意のタイミングをイベントとして提供するようにすべきです。
たとえば、現在のコードは Form1 が存在していることに完全に依存しています。

DOBON.NET | プログラミング道 | プログラミング掲示板