- - PR -
TABキーでのフォーカス移動について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-01-07 22:44
現在、VB.NETでWindowsアプリを開発しています。
Enterキーが押されたときに、TABキーと同様の動作をさせて TabIndex順にフォーカスを移動させる処理を作成中なのですが、 フォーカスがテキストボックスに移動したとき、 もしそのテキストボックスに何か文字が入っていたら その文字列がすべて選択状態(反転表示)になります。 望んでいることは、もしテキストボックスにフォーカスが 移動したときは、テキストボックスに入っている文字列の 一番最後にカーソルがある状態にしたいのです。 これを実現する方法を探しているのですが、 どうしても文字列すべてが選択状態(反転表示)になってしまい、 回避策が見つかりません…。 もし、何かアドバイス等がありましたら ぜひご教授くださいますようお願い致します。 | ||||||||||||
|
投稿日時: 2005-01-08 01:13
TextBoxのGotFocusイベントかなんかで、TextBox.Select(int,int)メソッドで
文字列の最後尾を0文字分選択する、ようにすればいいと思います。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformstextboxbaseclassselecttopic1.asp | ||||||||||||
|
投稿日時: 2005-01-08 09:01
諸農です。
既にコメントがありますが、同じような方法をもう一つ。
この処理を対象のTextBoxのEnterイベントにセットします。
このコードでは記述していませんが、コントロールはコンテナコントロール上で ネストしている場合もあるのでその対処は忘れずにしてください。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2005-01-09 23:59
Jscript1.jsとして次のプログラムをHTMLに<script language="jscript" src="JScript1.js"></script>と埋め込むとうまくいきます。ある本に載っていました
忘れましたけど。 document.onkeydown = new Function("ConvertToTabFromEnter();"); function ConvertToTabFromEnter() { if(event.keyCode == 13) { if(event.srcElement.type == null) { event.returnValue = false; } if(event.srcElement.type == "text" || event.srcElement.type == "radio" || event.srcElement.type == "checkbox" || event.srcElement.type == "password" || event.srcElement.type == "file" || event.srcElement.type == "select-multiple" || event.srcElement.type == "select-one" || (event.srcElement.type == "textarea" && event.srcElement.wrap != "off")) { try { event.keyCode = 9; } catch(e) { event.returnValue = false; } } } } | ||||||||||||
|
投稿日時: 2005-01-10 00:11
浅学のため教えていただきたいのですが、 Windowsアプリではどこにどのように埋め込めばいいのでしょうか? _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2005-01-10 00:48
ごめんなさい。ASP.NETでのWEBアプリケーションの場合でした。
WINDOWSアプリケーションでしたね。下の様にすると TEXTBOX1でENTERを押すとTEXTBOX2の内容の最後にカーソルが来ると思いますが・・・ どうでしょうか?? Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown If e.KeyCode = Keys.Enter Then TextBox2.Focus() TextBox2.Select(TextBox2.Text.Length, 0) End If End Sub | ||||||||||||
|
投稿日時: 2005-01-11 09:40
こんにちは、じゃんぬねっと です。
もう解決してそうですが、ちょっとだけ...。
まず、[Enter] キーによるフォーカス遷移について http://jeanne.wankuma.com/tips/form/27-cobolerform.html
これは、そういう処理がされているわけではなく、前回選択していた範囲が残っているからですね。
この場合は、こちらの SelectAll の変わりに、 http://jeanne.wankuma.com/tips/textbox/06-onselectall.html TextBox1.SelectedStart = TextBox1.Length とすれば良いだけです。 _________________ じゃんぬ @Home じゃんぬねっと @Blog じゃんぬねっと Blog [ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2005-03-15 19:54 ] | ||||||||||||
|
投稿日時: 2005-01-11 16:51
たくさんのお返事ありがとうございます。
皆様からのアドバイスで望んでいる通りの動作ができました! コントロール名をベタで記述するのは変更があった場合にツライので、 どのコントロールでEnterキーが押されても 次のTabIndexを持っているコントロールにフォーカスが移動し、 その移動先コントロールにセットされている文字列が 反転表示にならないようにソースを記述しました。 以下にソースを記載します。 本当にありがとうございました!! -------------------------------------------------------------------- Private Sub myEnter(ByVal sender As Object, ByVal e As System.EventArgs) Dim tb As TextBox tb = CType(sender, TextBox) If IsNothing(tb) = False Then tb.SelectionStart = tb.Text.Length End If End Sub という関数を1つ作り、 以下のソースをLoadイベントに記述しました。 Dim MyObject As Control Dim strCtlName As String For Each MyObject In Me.Controls If MyObject.ToString = "System.Windows.Forms.TextBox" Then AddHandler CType(MyObject, TextBox).Enter, AddressOf myEnter End If Next -------------------------------------------------------------------- |
1