tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル FlexGridが絡むTextBoxエラー時の対処
投稿日: 2007/07/27(Fri) 15:45
投稿者KORO
[[OSのVer]:WindowsXP SP2   [VBのVer]:VB.NET2003

COMコンポーネントよりAxMSFlexGridを追加し、
Form上にAxMSFlexGridとTextBoxとその他(適当)を配置し、
以下のコードを記述しました。
------------------------------------------------------------------
    Private Sub TextBox1_Validating(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles TextBox1.Validating

        'フォーム右上の×ボタン対応
        If Me.ActiveControl Is sender Then Exit Sub

        With sender
            If .text <> "" Then
                MsgBox("入力中")
                .SelectAll()
                e.Cancel = True
            End If
        End With
    End Sub
------------------------------------------------------------------
そして実行し、TextBoxにフォーカスを与えた後、AxMSHFlexGridを
マウスでクリック選択(これが重要)するとTextBox1のValidatingが
延々と発生し"入力中"のメッセージが表示され続けます。
その他のオブジェクトをマウスでクリックしてもValidatingは一度しか
発生しませんでした。
この原因がわかる方、または対処法を知っている方がいらっしゃいましたら
ご教授のほどよろしくお願いいたします。

ちなみに
------------------------------------------------------------------
    Private mTxtValFlag As Boolean      '発生中フラグ

    Private Sub TextBox1_Validating(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles TextBox1.Validating

        'フォーム右上の×ボタン対応
        If Me.ActiveControl Is sender Then Exit Sub

        With sender
            'フレックスグリッドの場合
            If Me.ActiveControl Is AxMSFlexGrid1 Then
                '発生中の場合
                If mTxtValFlag = True Then
                    'エラー箇所にフォーカス移動
                    sender.focus()
                    sender.SelectAll()
                    e.Cancel = True
                    Exit Sub
                End If
                '発生中フラグ
                mTxtValFlag = True
            End If

            If .text <> "" Then
                MsgBox("入力中")
                .SelectAll()
                e.Cancel = True
            End If
        End With

    End Sub


    Private Sub AxMSFlexGrid1_MouseDownEvent(ByVal sender As Object, _
ByVal e As AxMSFlexGridLib.DMSFlexGridEvents_MouseDownEvent) _
Handles AxMSFlexGrid1.MouseDownEvent
        '解除
        mTxtValFlag = False
    End Sub

------------------------------------------------------------------
のようにフラグで抜けようとしたところ、メッセージは一度しか出ませんが
ActiveControlはAxMSFlexGrid1、FocusはTextBox1と言う状況になり
フォーム右上の×を押してもTextBox1をクリックしてもValidatingイベント
が発生してしまいます。

以上、よろしくお願いします。

古いスレッドにレスはつけられません。