トップ回答者
【VisualBasic2012】フォーム1から、フォーム2を表示しようとしてもフォームが表示されない現象について

質問
-
お世話になります。
Visual Basic2012で開発しています。
フォーム1から、フォーム2を表示する簡単な処理を行いたいのですが、
システム起動後の1回目に限り、フォーム2が表示されない現象が発生しています。
2回目以降はフォームは表示されます。
1回目も2回目も同じロジックが実行されているにも関わらずこのような現象が発生しています。
また現象は、フォーム2のタイトルが非表示な時に現象が出ています。
以下に各フォームのロジックを簡易ながら記述します。
フォーム1:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'↓引数でフォーム2に情報を渡したいのでフォーム2の関数をCALLしています。
Call Form2.KIDOU()
End Sub
End Class
フォーム2:
Public Class Form2
Public Sub KIDOU()
Me.ShowDialog()
End Sub
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.ControlBox = False
Me.Text = ""
End Sub
End Class
一応の対策としては、フォーム2の「Text」プロパティに半角空白でもセット
してやれば現象を避けることはできるのですが、これが正しい方法なのかがわかりません。
そもそもフォームのタイトルが非表示になると、何故このような現象が起こるのでしょうか?
ご存知の方がいらっしゃいましたら、ご教示して頂けると助かります。
- 移動 立花楓Microsoft employee, Moderator 2017年7月10日 8:18 .NET Framework から
回答
-
すみません。原因は分からなかったのですが、私の環境でも再現しましたので動作を確かめたところ、Me.ControlBox = False と設定されたフォームに対して Me.Text = "" とタイトルに空文字を設定すると、フォームが一度閉じられ(ウィンドウに対してWM_DESTROYが呼ばれている)てからフォームが作り直される動きのようです。想像になりますが、ShowDialog によって表示されたフォームでは、フォームの作り直しの部分がうまく行っていないように思いました。
先に Me.Text = "" とした後に、Me.ControlBox = False を行うと現象は発生しなくなりました。
Me.Text = "" Me.ControlBox = False
回避方法として、上記のように順番を逆にするのも手かもしれません。- 回答としてマーク Miyazaki Hiroaki 2017年7月10日 23:58
- 回答としてマークされていない Miyazaki Hiroaki 2017年7月11日 0:07
- 回答としてマーク Miyazaki Hiroaki 2017年7月11日 0:07
- 回答としてマークされていない Miyazaki Hiroaki 2017年7月11日 0:30
- 編集済み kenjinoteMVP 2017年7月11日 0:37
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年7月13日 7:06
- 回答としてマーク Miyazaki Hiroaki 2017年8月21日 7:00
すべての返信
-
Miyazaki Hiroaki さん、ご投稿いただきありがとうございます。
フォーラム オペレーターの立花楓です。今回、MSDN「.NET Framework 」 フォーラムに投稿いただいた内容については、MSDN「Visual Basic」 フォーラムにてご質問いただいたほうが、情報が集まりやすいと思いますので移動させていただきました。
MSDN フォーラム > Visual Studio Development > Visual Basic
https://social.msdn.microsoft.com/Forums/ja-JP/home?forum=vbgeneralja&filter=alltypes&sort=lastpostdesc今後、参考になる情報がありましたら、投稿者からの [回答としてマーク] をお願いします。
MSDN/TechNet Community Support 立花楓
- 編集済み 立花楓Microsoft employee, Moderator 2017年7月10日 8:19
-
すみません。原因は分からなかったのですが、私の環境でも再現しましたので動作を確かめたところ、Me.ControlBox = False と設定されたフォームに対して Me.Text = "" とタイトルに空文字を設定すると、フォームが一度閉じられ(ウィンドウに対してWM_DESTROYが呼ばれている)てからフォームが作り直される動きのようです。想像になりますが、ShowDialog によって表示されたフォームでは、フォームの作り直しの部分がうまく行っていないように思いました。
先に Me.Text = "" とした後に、Me.ControlBox = False を行うと現象は発生しなくなりました。
Me.Text = "" Me.ControlBox = False
回避方法として、上記のように順番を逆にするのも手かもしれません。- 回答としてマーク Miyazaki Hiroaki 2017年7月10日 23:58
- 回答としてマークされていない Miyazaki Hiroaki 2017年7月11日 0:07
- 回答としてマーク Miyazaki Hiroaki 2017年7月11日 0:07
- 回答としてマークされていない Miyazaki Hiroaki 2017年7月11日 0:30
- 編集済み kenjinoteMVP 2017年7月11日 0:37
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年7月13日 7:06
- 回答としてマーク Miyazaki Hiroaki 2017年8月21日 7:00
-
Loadイベントの時点では適切な操作ではないのかもしれません。
例えば次のタイミングでセットすればうまく行くようです。Public Sub KIDOU() Me.ControlBox = False Me.Text = "" Me.ShowDialog() End Sub
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年7月13日 7:06