- 題名: ControlBoxプロパティをFalseにして、フォームを固定する方法
- 日時: 2008/02/26 20:25:24
- ID: 21507
- この記事の返信元:
- (なし)
- この記事への返信:
- [21509] Re[1]: ControlBoxプロパティをFalseにして、フォームを固定する方法2008/02/27 0:06:50
- ツリーを表示
2008/02/27(Wed) 10:36:01 編集(投稿者)
2008/02/27(Wed) 01:14:23 編集(投稿者)
(変更履歴)
1.Form1のprivate void test()内に以下のコードを追加
frm2.Owner = frm1;
2.Form1_1内に protected override void OnLocationChanged を追加
3.上記2.を削除、Form1_1内の protected override void WndProc のif文を変更
(ここまで変更履歴)
はじめまして、引っ込んだ略と申します。
# 引っ込んだ(略) → 引っ込んだ略 にハンドルネームを変更いたします。
やじゅさんに先を越されてしまいましたが、(汗
Formのサイズ変更対策も施してみました。
以下のコードで試してみて下さい。
※ コードがC#ですが、ご了承下さい。
参考文献
http://dobon.net/vb/dotnet/form/fixformposition.html
public partial class Form1 : Form
{
// デザイナでbutton1を配置してください。
private void button1_Click(object sender, EventArgs e)
{
test();
}
// 移動できないFormを2つ並べて表示してみる
private void test()
{
Form1_1 frm1 = new Form1_1("frm1", 300, 200);// ←タイトル文字列、幅、高さを指定
Form1_1 frm2 = new Form1_1("frm2", 300, 200);
frm1.Show();
frm2.Show();
frm2.Owner = frm1; [追記1]この行を追加
frm2.Location = new Point(frm1.Right, frm1.Top);
}
}
// 移動できないForm
public class Form1_1 : Form
{
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MOVE = 0xF010;
private const int SC_MAXIMIZE = 0xF030; // [追記3]この文を追加
public Form1_1(String title,int wd,int ht)
{
this.Text = title;
this.ControlBox = false;
this.Size = new Size(wd, ht);
this.MinimumSize = this.Size;
this.MaximumSize = this.Size;
}
// ↓[追記2]このメソッドを追加 → [追記3]やはり不要なので削除
//protected override void OnLocationChanged(EventArgs e)
//{
// this.MaximizedBounds = this.Bounds;
// base.OnLocationChanged(e);
//}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND &&
( (m.WParam.ToInt32() & 0xFFF0) == SC_MOVE ||
(m.WParam.ToInt32() & 0xFFF0) == SC_MAXIMIZE )) // [追記3]if文の()内の式を変更
{
m.Result = IntPtr.Zero;
return;
}
base.WndProc(ref m);
}
}
以上です。
分類:[.NET]
【解決したい問題】
2つの画面を1つのフォームのように見せるために、
子画面のほうを、タイトルバーをドラッグしてもフォームが移動しないようにし、なおかつ、×ボタンも表示しないようにしたいのです。
フォームを固定する方法については、以下のページに載っていて
実現できました。
http://dobon.net/vb/bbs/log3-19/11830.html
これで、実現できたと思っていたのですが、
×ボタンを表示させないために、ControlBox = False とすると、
フォームが移動できるようになってしまいました。
×ボタンを表示させず、フォームを固定する方法はあるのでしょうか?