|
■No36402 (unun さん) に返信
> 環境:VS2008
> 言語:C#(VB.NETでも可)
>
> テキストボックス、ラジオボタン等とボタンが乗っているユーザコントロールがあります。
> このユーザコントロール上でEnterを押した際に、このボタンを押させたと扱わせるデフォルトボタン設定はできないでしょうか?
ユーザコントロールじゃ、キーのフックはできないみたいだから、適当なタイミングでユーザコントロールに配置されているコントロールのKeyDownイベントをフック。
Private Sub UserControl1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For Each c As Control In Me.Controls
AddHandler c.KeyDown, AddressOf KeyDownFook
Next
End Sub
Protected Sub KeyDownFook(ByVal sender As Object, ByVal e As KeyEventArgs)
If e.KeyCode = Keys.Enter Then
Me.Button1_Click(Nothing, e)
End If
End Sub
> また、このユーザコントロールをフォームに貼り付けた場合に、フォーム上でEnterを押した場合にユーザコントロールをデフォルトとさせることは可能でしょうか?
> AcceptButtonはその名の通り、ボタンしか設定することが出来ませんでした。
んじゃ、ユーザコントロールの描画領域外にボタンを配置しておいてFormのAcceptButtonにセットするとかは?:-)
フォームにユーザコントロールが貼り付けられたら、フォームかどうか検証してフォームならAcceptButtonを設定する。
Private Sub UserControl1_ParentChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ParentChanged
If Me.Parent IsNot Nothing Then
If Me.Parent.GetType.IsSubclassOf(GetType(Form)) Then
DirectCast(Me.Parent, Form).AcceptButton = Me.Button1
End If
End If
End Sub
|