- PR -

MDI子フォームにおけるアクティブウインドウの遷移

1
投稿者投稿内容
MAKTO
会議室デビュー日: 2003/12/05
投稿数: 5
投稿日時: 2003-12-05 13:42
現在、以下の環境でWindowsフォームによるアプリを開発中です。
.NET Framework 1.0
言語 C#
OS Windows2000

MDIフォームを利用していますが、子フォームの一部分をクリックしたときに、
そのフォームが最前面に表示されるようにしたいと考えています。
(通常はタイトルバーをクリックしたときのみ最前面に表示される)

現在は、フォーム、パネル、テキストボックスなどのコントロールからClickイベントを取得し(フォームデザイナで設定)共通のメソッドを呼び出し、そのメソッド内で
this.Focus();
を呼び出して対応しています。

しかしこの方法では、コントロールを増やすたびに設定しなければならないし、
ボタンコントロールなどの場合、Clickイベントは必ず他で必要ですから、
共通のものは使えません。

他に何かいい方法は無いものでしょうか?
MAKTO
会議室デビュー日: 2003/12/05
投稿数: 5
投稿日時: 2003-12-05 18:05
最前面に表示というのは、複数の子フォームが開いている場合、
ある子フォームをクリックしたときに、MDI親フォーム内において、そのクリックした子フォームを他の子フォームより前に表示させたいということです。

伝わりますでしょうか?よろしくお願いします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2003-12-05 19:10
こんにちわ。諸農です。

子フォームのフォーカスをセットするイベントハンドラを、
フォーム上のコントロール全部にセットしてみたらいかがでしょうか?

コード:
private void MDIForm1_Click(object sender, System.EventArgs e)
{
	this.Activate();
	label1.Text = DateTime.Now.ToString();
}
		
private void MDIForm1_Load(object sender, System.EventArgs e)
{
	foreach(Control c in this.Controls){
		c.Click += new EventHandler(this.MDIForm1_Click);
	}
}



ではでは(^^)/
_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
MAKTO
会議室デビュー日: 2003/12/05
投稿数: 5
投稿日時: 2003-12-08 11:18
諸農様、お返事ありがとうございます。
教えていただいたコードで希望どおりの動作になりましたが、もう一つよろしいでしょうか?

子フォーム上のTabControlやPanelの中に配置されているLabelやTextBoxなどにイベントハンドラをセットすることができなかったので、ソースを修正しました。

以下のようなコードになったのですが・・・
コード:
private void MDIForm1_Load(object sender, System.EventArgs e)
{
	foreach(Control c in this.Controls)
	{
		c.Click += new EventHandler(this.frmMDIChild_Click);
		foreach(Control cc in c.Controls)
		{
			foreach(Control ccc in cc.Controls)
			{
				ccc.Click += new EventHandler(this.frmMDIChild_Click);
				foreach(Control cccc in ccc.Controls)
				{
					cccc.Click += new EventHandler(this.frmMDIChild_Click);
				}
			}
		}
	}
}



もちろん動作上は問題ないのですが、見栄えがあまりよくないので、
他にソースの書き方は無いものかと思い、ご意見をいただきたいと思いました。

よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)