tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル検索画面が正常に表示されない
記事No763
投稿日: 2004/02/27(Fri) 11:00
投稿者にきゅ〜
[OSのVer]:Windows2000    [VBのVer]:VB.NET2003  
お世話になっております。.NET Compact 1.0(SP2)を使っている者ですが、
TextBoxにFocusが当たった時、検索ダイヤログを表示して、
検索をする処理を作っているのですが、
実行するとダイヤログが表示されず、呼出元画面がちらつき、
異常終了してしまいます。

検索ダイヤログを表示する処理を呼ぶ前に
Msgboxを表示するとうまく表示されます。
下記がソースです。
原因がつかめず、困っています。また、回避方法ってあるのでしょうか?
教えて下さい。

Private Sub TextBox1_GotFocus(ByVal sender As Object, _
                                  ByVal e As System.EventArgs) _
                                  Handles TextBox1.GotFocus

        Dim intBtStyle As Integer
        Dim strRet1 As String
        Dim strRet2 As String
        Dim strRet3 As String
        Dim strKey As String
        Dim MyObject As Class3
        Dim objMain As New 共通Dll.clsMain
        MyObject = New Class3
        MyObject.MainObjRef = objMain
        'Msgbox("メッセージ")
        '下記の一文で検索ダイヤログが表示されます
        Call MyObject.MainObjRef.modGet_Master(strRet1)
        'ダイアログから取得した値をセットする
        TextBox1.Text = strRet1

[ツリー表示へ]
タイトルRe: 検索画面が正常に表示されない
記事No769
投稿日: 2004/03/01(Mon) 22:37
投稿者たくボン
共通Dll.clsMainやClass3の中身がないのでなんとも言えないのですが、GetFocusを使用されているから
です。検索ダイアログが表示されたときにTextBox1からFocusが移動、ダイアログにFocusが移動。最後

> TextBox1.Text = strRet1
この部分で再度GetFocusが発生ですね。下のようなサンプルでも同様の現象は発生します(点滅すると
いうことは、共通Dllの中でスレッド処理してるような感じがするんですが・・・)

Private Sub TextBox1_GotFocus( _
    ByVal sender As Object, ByVal e As System.EventArgs _
    ) Handles TextBox1.GotFocus
    Dim f6 As New Form2
    Console.WriteLine("TextBox1_GotFocus")
    Console.WriteLine("Show Form")
    f6.Show()
    TextBox1.Text = f6.Text
End Sub

Private Sub TextBox1_LostFocus( _
            ByVal sender As Object, ByVal e As System.EventArgs _
            ) Handles TextBox1.LostFocus
    Console.WriteLine("TextBox1_GotFocus")
End Sub

回避方法としては、
1.GotFocusで処理しない。
2.フラグ変数で、ダイアログを一度表示したら2度目のGetFocusを処理しない。
なんかがありますね。
個人的には、このようなコードは嫌いなので極力さけますが・・・。

[ツリー表示へ]
タイトルRe^2: 検索画面が正常に表示されない
記事No771
投稿日: 2004/03/06(Sat) 15:36
投稿者にきゅ〜
[OSのVer]:Windows    [VBのVer]:VB.NET  
 お返事ありがとうございます。
 結局、自分でもいろいろ考えてみてフラグ処理が一番無難でした。
 ただし、汚いコードになるのでやめようと思います。
 但し、フラグ処理等しない方法をとるとデザインが複雑になるのでは?
 って思います。そもそも、初めはpanelの上にLabelを貼って
 Panelのクリックイベントで処理してましたが、枠線が表示されないので
 止めて、TextBoxにした経緯があります。
 最もいいのは、NET Compact 1.0(SP2)で
 枠線を表示するコンポーネントがあって使用できればいいのですが。
 もしご存知であれば教えて下さい。

[ツリー表示へ]