タイトル : 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イベント が発生してしまいます。 以上、よろしくお願いします。 |