-1

(入力番号用の)テキストボックスが1つしかないusercontrolで奇妙な状況が発生しました。
たとえば、「編集状態」では、テキストはフォーマットされておらず、左揃えになっていますが、コントロールを離れた後、同じテキストをフォーマットして右揃えにします。そのために、テキストボックスの「leave」イベントハンドラーの下にあるコードを使用します。

Private Sub numText_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles numText.Leave
    Debug.Print("numText_Leave")
    numText.TextAlign = def_Alignment ' right
    RefreshText()                     ' sub for formatting
End Sub

そして、何が起こりますか?
プログラムが_Leaveにステップインし、新しい配置を設定すると、numTextが再び入り、usercontrolは終了したくありません。これらのコードにコメントを付けると、usercontrolは正常に終了しますが、目的のテキストを表示(フォーマット済み)できません。
_Leaveハンドラーの代わりにnumText_LostFocusを使用した場合も同じです。

ここで何をすべきかについて何か考えはありますか?

編集:
結局のところ、私は解決策を見つけました。
トリックは、入力にtextbox_Enterを使用し、終了にtextbox_LostFocusを使用することです。
このようなイベントのペアは、終了時にテキストボックスの配置を設定するときにtextbox_Enterを発生させません。

4

1 に答える 1

0

...私はあなたの問題を100%理解しているとは確信していませんが、私が理解していると思うことから、コントロールがイベントを再帰的に呼び出す同様の状況がありました。私は通常、たとえば DoWork と呼ばれる外部ブール変数を作成して対処し、次のようにします。

Dim DoWork as Boolean = True

Private Sub numText_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles numText.Leave
    If DoWork then
        DoWork = False
        Debug.Print("numText_Leave")
        NumText.TextAlign = HorizontalAlignment.Right
        Refreshtext()
        DoWork = True
End Sub

...それらの線に沿って、同じ機能に移行し続けるのを止めるための何か。

これが理にかなっていることを願っています

于 2012-11-26T15:55:40.180 に答える