- - PR -
VB2003と2005で挙動が違う(ActiveControl)
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-18 11:28
XP Pro SP2
VB2003とVB2005でActivecontrolの設定時の挙動が違います --- VB2003 ----------------------------------------------------- 新規Windowsアプリケーションプロジェクト作成 form1 と form2 2つ作る それぞれ textbox1,textbox2,button1 を置く form1のコード Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim frm2 As New Form2(Me) frm2.ShowDialog() End Sub form2のコード Public Sub New(ByRef _frm1 As Form1) MyBase.New() ' この呼び出しは Windows フォーム デザイナで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後に初期化を追加します。 frm1 = _frm1 End Sub Dim frm1 As Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click frm1.ActiveControl = frm1.TextBox1 Me.Close() End Sub -------------------------------------------------------------------------- form1で textbox2 にフォーカス移動してから button1 をクリックし、 form2を表示。 form2で button1をクリックし form1 へ戻ると form1 の textbox1 が フォーカスを 持った状態になります。 これをウィザードでVB2005へコンバートして実行すると form1 へ戻ってもフォーカスが button1 のままです。 VB2005でもちゃんとフォーカス移動するにはどうすればいいでしょうか? | ||||||||||||
|
投稿日時: 2006-08-18 12:05
正しくは、「.NET Framework 1.1 と 2.0 で」 だと思います。 個人的には、1.1 までの挙動にも違和感を感じます。 が、検証した結果、2.0 での挙動にはさらに違和感を感じました。(;_ _) ActiveControl を設定すると、確かに ActiveControl は設定したコントロールに置き換わっています。 実際に、フォーカスが動いているのが見えます。 ここまでは、1.1 でも 2.0 でも同じです。 ただし、2.0 の場合は、呼び出し元のフォームに制御が移ると '元に戻される' ようです。 最初から無視しておけばいいわけですから、これは気持ち悪いです。
ActiveControl を設定するタイミングが今のままですと、Modal 表示をやめる必要が出てきます。 となると、タイミングを変えることになるでしょう。 そもそも、別のフォームから、他のフォームに対して直接何かをするというのは避けるべきです。 しかも今回は、'呼び出し先' が '呼び出し元' を制御しようとしています。 これは、構造化言語時代から忌み嫌われていることです。 私ならば、以下のような感じでスッキリさせます。
どうでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-08-18 12:48
ありがとうございます。
ご提示いただいたコードで実現できました。 なぜこんな事をしたかったのかというと、条件によってform1側に戻った時に フォーカスのセット先を変えたかったからです。 DialogResult自体使ったことなかったので勉強になりました。 サードパーティー製のコンポーネントがやっと.net2.0対応したので 2005にソース修正しているのですが、挙動が変わるのはやめてほしいですね。 | ||||||||||||
|
投稿日時: 2006-08-18 13:00
いえ、止むを得ないでしょう。 それを嫌って、古いバージョンのままというところもあります。(そういう選択肢もあります) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1