- - PR -
定位置に配置するウィンドウ
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-06-06 15:43
Form.Loadイベントの中で、デスクトップのサイズを取得し、
ウィンドウの座標を計算して、定位置に移動しようとしているのですが・・・ どうしても、一瞬、デフォルトの位置に表示されてしまいます。 そこで、 ウィンドウを最初不可視にしておいて、 移動してから(Locationを設定してから)可視化しようと思ったのですが 最初に不可視にする方法がわかりません。 Loadイベントの中で this.Visible = false; 等とやっても、消えてくれないですし CreateParamsをオーバーライドして、 ウィンドウスタイルからWS_VISIBLEを消してみたりしてもダメでした。 どうやったら消すことが出来る あるいは、 いきなり計算した定位置に出すことが出来るでしょうか? | ||||||||
|
投稿日時: 2008-06-06 16:10
コンストラクタの中(InitializeComponent を呼び出した後)辺りに記述すればいいんじゃないですか。
// 念のためのキーワード:StartPosition | ||||||||
|
投稿日時: 2008-06-06 16:24
なるほど、 早速、コンストラクタ内で、 this.StartPosition = FormStartPosition.Manual; を設定し、ウィンドウの座標を設定をしてみましたが、なにか変です。 キャプションバーの無いウィンドウを作ろうとしているのですが、 FormStartPosition.Manual を設定すると、 キャプションバーも含めた大きさの、キャプションバーのないウィンドウになってしまいます。 オーバーライドしたCreateParamsの中で、WS_CAPTIONを消してみると、 なんとなくうまくいくのですが・・・なぜか、 コンストラクタの中で取得できるForm.Sizeが、 Loadイベントやそれ以降に取得できるForm.Sizeより4ピクセルほど小さくなってしまいます。 | ||||||||
|
投稿日時: 2008-06-06 16:56
Form.Loadイベントはフォームが初めて表示される直前に発生するイベントなので、 「一瞬デフォルトの位置に表示される」ことはありえないような気がします。
試しにこんなコードを実行してみましたが、フォームが移動するようには見えませんでした。 | ||||||||
|
投稿日時: 2008-06-06 17:06
私もそう思っていたのですが・・・ おかしいと思いつついろいろ削っていると、 Loadイベントの中で this.FormBorderStyle = FormBorderStyle.None; これをやっているのが原因のようでした。 (ボーダーを設定したことによって表示されてしまったのでしょうか) Loadイベントの中で設定せず、デザイナで設定するとうまくいきました。 ありがとうございました。 | ||||||||
|
投稿日時: 2008-06-06 17:22
確認してみました。
ほんとだ。なぜか☆の時点で表示されちゃってるぽいですね…不思議。 |
1