プロが教える店舗&オフィスのセキュリティ対策術

VB開発初心者です。
VB.NETでWindowsMobile5.0開発してます。
.NETCONPACTFreameWork2.0です。

TABキーで移動するように
ボタンクリックイベントで次のコントロールへFocusを移動させたいのですがうまく行きません。
下記の記述すればOKだと思いましたが、
Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
ActiveControlを.NETCONPACTFreameWorkがサポートしてませんでした。

ほかに良い方法ありませんでしょうか?
宜しくお願いします。

A 回答 (3件)

フォームクラスの変数に


dim ctlPrev as Control
を追加
フォーカスを制御したいコントロールの LostFocusイベントを処理して
ctlPrev = CType(Sender,Control)
としておきます

次への処理で
Me.SelectNextControl( ctlPrev, True, True, True, True)
としてやればいいのではないでしょうか

ActiveControlを使ってボタンClickイベントでの処理ではそのボタンの次のTabStopのコントロールにしか移動できません
Clickした時点でActiveControlが移動してしまうため …
    • good
    • 0
この回答へのお礼

いつもお世話になっております。

LostFocusを行って次の処理を考えておりますが、
現在のFocusの位置を知るにはどうすればいいんですか?
Me.SelectNextControl(”現在のフォーカス位置”, True, True, True, True)
とすれば次のコントロールへFocusが移動するはずですが・・・

お礼日時:2008/11/23 20:07

LostFocusイベントが発生しいた時点でフォーカスを持っているのは引数で示されたSenderオブジェクトになると思います



Me.SelectNextControl( Sender, True, True, True, True )
でいいように思いますが
これでは支障が出るのでしょうか?
    • good
    • 0
この回答へのお礼

回答、誠にありがとうございます。
自分の考え方を纏めてみます。
LostFocusイベントで
TextBox1コントロールをctlPrevに格納し、
ボタンクリックイベントで
Me.SelectNextControl(ctlPrev , True, True, True, True)
と考えて下記のように記述しましたがctlPrevはプライベート変数なのでボタンクリックイベントで使えませんでした。
この考え方で正しいでしょうか?
またこのような場合どうすればいいんでしょうか?
初歩的な質問かもしれませんがご教授のほどよろしくお願いします。

Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As EventArgs)
MessageBox.Show("LostFocusイベントが発生しました。")
Dim ctlPrev As Control
ctlPrev = CType(sender, Control)
End Sub

Private Sub Button51_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button51.Click
Me.SelectNextControl(ctlPrev , True, True, True, True)
End Sub

お礼日時:2008/11/24 09:55

> ctlPrevはプライベート変数なので


これではダメですね
『プライベート変数』という表現もおかしいと思います
本来は『ローカル(局所)変数』とすべきでしょう

『フォームクラスのスコープを持つ変数』としてctlPrevを宣言しましょう
PublicでもPrivateでもProtectedでも構いません
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
下記のように記述しうまく行きました。
Public Class SetForm
Public ctlPrev As Control

Private Sub TextBox_LostFocus(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox1.LostFocus, TextBox2.LostFocus, TextBox3.LostFocus, TextBox4.LostFocus, TextBox5.LostFocus, TextBox6.LostFocus
'MessageBox.Show("LostFocusイベントが発生しました。")
ctlPrev = CType(sender, Control)
End Sub

お陰様でいつも助かっております。
ありがとうございました。

お礼日時:2008/11/24 14:36

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