Page 406 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼またまた タブについて 123 02/11/26(火) 15:41 ┗Re:またまた タブについて ぴかる 02/11/26(火) 15:54 ┗Re:またまた タブについて 123 02/11/26(火) 17:07 ┗Re:またまた タブについて ichinose 02/11/26(火) 18:10 ┣Re:またまた タブについて ぴかる 02/11/26(火) 18:58 ┃ ┗Re:またまた タブについて 123 02/11/27(水) 10:44 ┗Re:またまた タブについて 123 02/11/27(水) 10:42 ┣Exitイベント内では無理なんじゃ・・・?? つん 02/11/27(水) 13:23 ┣Re:またまた タブについて ichinose 02/11/27(水) 13:36 ┗Re:またまた タブについて Jaka 02/11/28(木) 10:07 ┗どちらの方法でもOKでした。 123 02/11/28(木) 19:21 ─────────────────────────────────────── ■題名 : またまた タブについて ■名前 : 123 ■日付 : 02/11/26(火) 15:41 -------------------------------------------------------------------------
またまた タブについて教えてください。 TextBox1のタブが「1」 TextBox2のタブが「2」 になっています。 If TextBox1.Value <> "" Then TextBox2.SetFocus Else TextBox1.SetFocus としたいのですが、TextBox1が空白でも、 どうしてもTextBox2 へ タブが飛んでしまいます。 Cancel = True すると、 必ずTextBox1に何かを入力しないと他の作業ができません。 (フォームを閉じることもできません) いったいどうしたらよいのでしょうか。 |
123 さん、こんにちは。 私も以前に教えて頂きました。こんなんでどうでしょう?。 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyReturn Then If TextBox1.Value = "" Then KeyCode = 0 Else TextBox2.SetFocus End If End If End Sub |
▼ぴかる さん: ありがとうございます。 すみません。付け加えなければいけないことがあります。 実は、TextBox1は、 KeyDownで書式を変更するようにしていて、 Exitである処理をして、それからTextBox2へタブを飛ばす ようにしています。 その際に、TextBox1が空白であった場合に、TextBox1へFocusを 戻すようにしたいのです。 やはり、Exitの方で処理させないと いけないみたいです。 上記背景で可能でしょうか。 (最初に説明していればよかったのですが...すみませんでした。) >私も以前に教えて頂きました。こんなんでどうでしょう?。 >Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) > > If KeyCode = vbKeyReturn Then > If TextBox1.Value = "" Then > KeyCode = 0 > Else > TextBox2.SetFocus > End If > End If > >End Sub |
▼123 さん: ▼ぴかる さん: こんばんは、横レス失礼します。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If TextBox1.Value <> "" Then TextBox2.SetFocus ' 次のTabindexがTextbox2なら、通常は要らないはずですが・・・ Else Cancel = True End If End Sub |
ichinoseさん、こんにちは。 >こんばんは、横レス失礼します。 毎度、毎度、フォローありがとうございます。ちょっと、仕事が長引きそうなので申し訳ありませんがバトンタッチしてください。中途半端でゴメンナサイです。m(_ _)m |
▼ぴかる さん: こんにちは。 お忙しいところ すみませんでした。 ありがとうございました。 |
▼ichinose さん: いつもいつも すみません。 説明不足ですみません。 空白でない場合は、Box2へ飛ぶ。 空白の場合は、Box1のまま。 なのですが、問題は、Cancel = True にすると TextBox1が空白のままだと 他のTextBoxやコマンドボタンへ移ることができないのです。 (あたりまえですが) マウスでフォーカスを移す場合や、Tabキーでフォーカスを移す場合 には、Cancelされないようにすればいいのかもしれませんが... 宜しくお願い致します。 |
こんにちは。横から失礼しますー >マウスでフォーカスを移す場合や、Tabキーでフォーカスを移す場合 >には、Cancelされないようにすればいいのかもしれませんが... このへんの判断を、Exitイベント内でするのは無理なんじゃないでしょうか? KeyDownイベント内のKeyCodeで判断するしかないじゃないかなー? (と、私のなけなしの知識を総動員したところそう思います) KeyDownイベントやExitイベントで他の処理をされているとうことですが、 Changeイベント内では出来ないのかな? 他の処理はどんなことをしているのか明記されたら、よい案が出てくるかも・・ |
▼123 さん: こんにちは。はっきりとは把握してないんですが・・・。 例えば、フォームにテキストボックスをTextbox1〜Textbox3までの3つ貼り付けたとします。さらにコマンドボタンをひとつ(Commandbutton1)を貼り付けたフォームを想定しました。タブーオーダーは、Textbox1〜Textbox3、の順とし、Commanbutton1は、TabstopをFalseとします。 以下に示すコードは、Textbox1の内容が空白のときは、Textbox1にフォーカスを当て、Textbox1に何らかなの入力がされていれば、TabIndexあるいは、マウスにより指示されたコントロールにフォーカスが移ります。 但し、コマンドボタンが選択された場合は、Textbox1の内容にかかわらず、フォーカスを移します。 '====================================================== Dim f_ctrl As Control '今回のコードでは、直接、見に行っていませんが、直前にアクティブだったコントロールを格納しておきます。直前のコントロールによって、処理を変える場合に使用します。 '============================================================= Private Sub CommandButton1_Click() MsgBox "ok" End Sub '============================================================== Private Sub CommandButton1_Enter() Call chk_data(CommandButton1) End Sub '===================================================================== Private Sub CommandButton1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Set f_ctrl = ActiveControl End Sub '====================================================================== Private Sub TextBox1_Enter() Call chk_data(TextBox1) End Sub '====================================================================== Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Set f_ctrl = ActiveControl End Sub '====================================================================== Private Sub TextBox2_Enter() Call chk_data(TextBox2) End Sub '====================================================================== Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) Set f_ctrl = ActiveControl End Sub '====================================================================== Private Sub TextBox3_Enter() Call chk_data(TextBox3) End Sub '====================================================================== Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) Set f_ctrl = ActiveControl End Sub '====================================================================== Private Sub UserForm_Initialize() Set f_ctrl = TextBox1 End Sub '====================================================================== Function chk_data(ctl) As Boolean Select Case TypeName(ctl) Case "TextBox" If TextBox1.Text = "" Then chk_data = False With TextBox1 .SelStart = 0 .SelLength = Len(.Text) .SetFocus End With Else chk_data = True End If Case "CommandButton" chk_data = True End Select End Function で仕様どおり動いていますが、動きがおかしいのですかね、それとも仕様なのか? Textbox1で空白の状態でTabキーを使用すると、Textbox2のEnterイベントではじかれて、当初ここで、Textbox1にいくと思っていたんですが、実は次のTab順のTextbox3に行ってしまいます。ここでもEnterイベントでひっかかりますが、次のTab順のTextbox1に入ったところでようやく止まります。そのため、コマンドボタンのTabstopをFalseにしました。 Exitイベントを使うとすると、基本は、フォーカスが移ったコントロールのEnterイベントでチェックしよういう主旨ですが、工夫が必要そうです。 |
みなさま、おはようございます。 ichinoseさんと同じく? もっと解ってないかもしれませんが..。 (これまでのレスをほとんど読んでません。) こう言うことなのでしょうか? 良く解ってないので、ハズしているかもしれませんが。 もっと具体的に説明された方が良いと思います。 自分で書いたコードも添えて。 Dim Flg1 As Boolean Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Flg1 = True Then MsgBox "なんかの処理" End If End Sub Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyReturn Then If TextBox1 = "" Then KeyCode = 0 Flg1 = False Else Flg1 = True End If Else Flg1 = False End If End Sub |
▼Jaka さん ichinoseさん こんばんは。 本日はやっと今になって 拝見させていただきました。 ありがとうございました。 jakaさんとichinoseさん どちらの方法でもOKでした。 >もっと具体的に説明された方が良いと思います。 >自分で書いたコードも添えて。 jakaさんの言われる通り、コードも載せようと思ったのですが、 あまりにも余計なコードが入っていて、かえって混乱させて しまうのではないかと思い、載せなかったのです。 今後は自分なりに簡略化したコードを載せるようにします。 ありがとうございました。 |