• 締切済み

VB6のロストフォーカス時の処理をキャンセルしたい。

textbox1 textbox2 textbox3 があったとします。 textbox1には ロストフォーカス時にエラー処理が入っています。 登録、終了ボタンがあり、登録ではエラーではじいていいのですが、 終了ボタンの場合、エラー処理を回避(キャンセル)する方法はないでしょうか? こんな感じで 終了.click textbox1.lostfocus の処理をキャンセル end

noname#209802
noname#209802

みんなの回答

  • fantom
  • ベストアンサー率31% (30/94)
回答No.3

終了ボタンのクリックイベントよりも、 先にマウスダウンイベントを発生させれば テキストのロストフォーカスよりも優先されるようです。 マウスのダウンアップイベントでフラグ立てて制御すれば、 擬似的に回避は可能かと思います。 Dim bcancel As Boolean Private Sub Command1_Click() Text1.Text = "終了処理" End Sub Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) bcancel = True Call Command1_Click End Sub Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) bcancel = False End Sub Private Sub Text1_LostFocus() If bcancel = False Then Text1.Text = "エラー処理" End If End Sub

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

データのチェックを Validateイベントに記述してみてはいかがでしょう 終了ボタンのCausesValidationプロパティをFalseに設定すれば終了ボタンはいつでもクリックできます 本当に終了して良いかのメッセージボックスなどを表示するなどは必要かもしれませんが …

  • Bickyon
  • ベストアンサー率41% (42/101)
回答No.1

textbox1にFocusがある状態で、終了ボタンをクリックした場合、クリックイベントよりロストフォーカスイベントの方が先に発生します。 なので、ロストフォーカスの処理をキャンセルすることはできません。 よって、ロストフォーカスにエラー処理を書くのではなく、他のコントロールのゴットフォーカスで、textbox1のエラーチェックを行うようにしましょう。

関連するQ&A

  • ロストフォーカスイベントとその他のイベントの関係

    ロストフォーカスイベント時のその他のイベント(ボタンイベント)の中止方法 フィールドのロストフォーカスイベントで3文字以上入力していた場合に エラーメッセージを表示する。 フィールドに4文字値を入力して、フォーカスをフィールドにあてたまま ボタンを押下するとロストフォーカスイベントが走り、 同時にボタンイベントも発動してしまいます。 ロストフォーカスイベント時にエラーが発生している場合は、 ボタン押下処理を中止するようにしたいのですが、可能でしょうか? 検証は、Java1.6で行っています。

    • ベストアンサー
    • Java
  • VB2008 DataGridView セル移動キャンセル

    VB2008 DataGridView セル移動キャンセル いつもお世話になってます。 Windows7 VB2008で現在開発しております。 画面にDataGridVIewと2つのボタン(更新、終了)がはっつけてあります。 列にはID、パスワード、名前、生年月日、性別があるとします。 やりたい事は IDを入力しセルからフォーカスが離れるとDBを参照し 登録されているIDの場合では他の項目を出力させますが 登録されていないIDの場合には「未登録」とメッセージ表示させ、 フォーカスは入力したセルのまま、というように動作させたいんです。 フォーカス移動をキャンセルしたいのでCellValidatingイベントで記述してますが 終了ボタンを押そうとフォーカスがセルから離れた瞬間メッセージ出力で ボタンから画面が閉じれなくなりました。 CellValidatingに記述してるのは以下みたいな感じです。 Private Sub DataGridView_CellValidating(Byval sender As ~, Byval e As ~) … ・・・ If Not ID登録チェック関数 Then MsgBox("未登録") e.Cancel = True End If ・・・ End Sub これってどう回避しますか? それか、使ってるイベントがよろしくないんでしょうか?

  • VB.NET フォーカスの位置をしる方法

    VB.NETにてWindowsMobile5.0の開発をしております。 下記のようにテキストボックスにフォーカスがきたら色を変える処理をしてますが、 テキストボックスがたくさんある場合どこがフォーカスされているか知ってテキストボックスなら色を変えると言う処理にしたいです。 何卒、ご教授のほどよろしくお願いします。 Private Sub T_ATO_GetFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T_ATO.GotFocus T_ATO.BackColor = Color.Aqua TextBox_ENT.Text = T_ATO.Text End Sub Private Sub T_ATO_LostFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles T_ATO.LostFocus T_ATO.BackColor = Color.White End Sub

  • コマンドボタンのEnterイベント後に、フォーカスを移動したい。

    コマンドボタンのEnterイベント後に、フォーカスを移動したい。 フォームに「TextBox1」(TabIndex=0)「TextBox2」(TabIndex=1)「CommandButton1」(TabIndex=2)の3つのコントロールがある場合。 CommandButton1がクリックされた場合も、TextBox2からCommandButton1に、タブキーまたはエンターキーで、フォーカスが移った場合にも、同じ処理を行い、処理結果によってTextBox1やTextBox2にフォーカスを移したいと考えています。 以下のようなサンプルを作成しました。 Private Sub CommandButton1_Enter() CommandButton1_Click End Sub Private Sub CommandButton1_Click() MsgBox ("OK") TextBox2.SetFocus End Sub この場合、CommandButton1_Enterのイベントが起こった場合、CommandButton1_Click()のTextBox2.SetFocusは効きません。 (正確には、CommandButton1_Enterイベントが終わった時点で無効でしょうか。) Enterイベントは、フォーカスが移動する前に発生するため、このイベントが終わった後に、そもそもの動作に戻り、フォーカス移動が発生してしまうからなのだと思っております。 要は、コマンドボタンにタブキーやエンターキーでフォーカスしても、コマンドボタンをクリックしたのと同じ処理を行い、所定の位置にフォーカスを持っていきたいのですが、どのように行えば良いか、わからない状況です。 よろしくお願いいたします。

  • OK CANCEL後の処理を戻す方法

    終了ボタンをクリックして別の関数で1:0kか2:cancel がもどってきます。 Private Sub cmdEnd_Click() return_meに1 2が入っています。 If return_me = 1 Then End End If End sub 1:okだとendで終了ですが、cancelだと、もと処理を抜けたいのですが、方法がわかりません・・。このソースだとプログラムが固まります。初歩的だと思いますが、お願いします。

  • コントロールが発生させるイベントを回避したい

    VB2008です。 状態: フォーム上にtextbox1、textbox2、button1があり、textbox1からtextbox2もしくはbutton1にフォーカスが移動したとき 1:textbox2への移動->textbox1のlostfocusイベントを通常通り発生させる。 2:button1への移動->textbox1のlostfocusイベントをキャンセルする。(1度たりとも発生させない、もしくは発生してもその処理を1度たりともさせない。) 1は通常の処理なのでなにもしなくていいと思うのですが、2の処理が上手に浮かびません。button1でフラグを立てて、textbox1_lostfocusの処理を抜けるようにしているのですが、必ず1度は処理が実行されます。 どのようにコードを書けばうまくできるでしょうか。もし、これが仕様ということなら、同じような処理をするにはどうすればよいでしょうか。 わかりにくければ補足いたします。よろしくお願いします。

  • タブコントロールのフォーカス枠を消したい

    VB.NET(VB2008)について質問です。 タブ式テキストエディタを作っているのですが、タブが選択されると そのタブのTextBoxにフォーカスを当てたいので TabControlのMouseDownイベントでTextBoxにフォーカスを移すようにしたのですが、その方法だと一瞬クリックしたタブにフォーカス枠が表示され、ちらついて見えます。 そこで、TabControlを継承して以下のようにすればフォーカス枠が消えるだろうと思ったのですが、ダメでした。 Public Class myTabPage Inherits TabControl Protected Overrides ReadOnly Property ShowFocusCues() As Boolean Get ShowFocusCues = False End Get End Property End Class ボタンなどの場合はこの方法でフォーカス枠を消すことができたのですが、TabControlの場合は無理なのでしょうか。 他の方法があったらご教授ください。

  • VB Loopを一時停止し再開あるいはキャンセル

    Loopで処理を回しています。処理件数が多く、処理の途中で一時停止させ、DataGridViewに表示されている処理結果を目で確認ないしマウスでコピーしてから、処理を再開ないしキャンセルして終了させる仕様を作成中です。 MessageBoxを使用すれば、Loopは一時停止出来たのですが、MessageBoxだとDataGridView上の処理結果をマウスでコピーなど出来ません。 そこで、MessageBoxを使用せずに、以下のコマンドを書いてみたのですが、最初のStopFlag=Trueが効くだけで次のコマンドは一瞬で処理されLoopが続いてしまいます。いかにすればLoopを一時停止できるか教えてください。 <変数宣言> Public StopFlag As Boolean Public CancelFlag As Boolean <前処理> TextBox1.Text = "処理待ち" 'テキストボックスに処理ステータスを表しています。 TextBox1.Refresh() <処理> Do Me.Cursor = Cursors.WaitCursor '砂時計開始 TextBox1.Text = "処理中" ’ステータスを処理中として表示 TextBox1.Refresh() ~ Application.DoEvents() 'ストップボタンを押下したらここでDoEventsさせます。 If StopFlag = True Then ’ここでLoopを一時停止させておきたいのです。 Me.Cursor = Cursors.Default '一旦砂時計を止めます TextBox1.Text = "処理一時停止" TextBox1.Refresh() If StopFlag = False Then ’再開ボタンが押下されたらここで再開させたい。 TextBox1.Text = "処理中" ’処理中と表示させます TextBox1.Refresh() Me.Cursor = Cursors.WaitCursor '砂時計再開です ElseIf CancelFlag = True Then ’キャンセルボタンが押下されれば、処理はLoopを抜けます。 TextBox1.Text = "キャンセル" TextBox1.Refresh() Exit Do End If Loop '----------ストップボタン---------- Private Sub Button2_Click~ StopFlag = True End Sub '----------再開ボタン---------- Private Sub Button3_Click~ StopFlag = False End Sub '----------キャンセルボタン---------- Private Sub Button4_Click~ CancelFlag = True End Sub この質問に補足する

  • どこにもフォーカスを当てたくない

    フォームを開いたとき、どこにもフォーカスを当てたくないです。 アクセス2003です。 フォームにテキストボックスを1つ設置して、そのフォームを開くと フォーカスがテキストボックス上で、点滅しますが どこにもフォーカスを当てない方法あるのでしょうか? Private Sub Form_Open(Cancel As Integer) Me.詳細.SetFocus End Sub とするとコンパイルエラーになってしまいます。 不可能でしょうか?よろしくお願い致します。

  • InputBox キャンセルボタンが押された時の処理

    こんばんは。 Sub test() Dim タイトル As String タイトル = InputBox("タイトルを入力してください。") If Cancel = True Then Exit Sub ’次のコード・・・ ’次のコード・・・ End Sub このコードを実行した時に 下記のダイアログが出てきて 右のキャンセルボタンを押すと、 「If Cancel = True Then Exit Sub」 でsubステートメントを抜けたいのですが 「Cancel」の部分が 「変数が定義されていません」とエラーになってしまいます。 Dim Cancel As Boolean を追加してキャンセルボタンを押しても TrueではなくFalseになってしまいます。 回避方法を教えてください。 よろしくお願いします。

専門家に質問してみよう