- PR -

C#でタイトルバーの表示を切り替え

1
投稿者投稿内容
めー
会議室デビュー日: 2004/07/26
投稿数: 9
投稿日時: 2004-07-26 09:37
めーと申します。

windowsフォームで、タイトルバーの表示・非表示を切り替えるような動作が
ほしいのですが、表示はできても非表示にしようとするとエラーが出てしまいます。

// fmにフォームのインスタンスが格納されてるとする
// 初期状態で fm.ControlBox=false, fm.Text="", fm.FormBorderStyle=Sizable とする

private void methodA() {
 if (fm.Text.Equals("")) {
  // タイトルに代入する。(タイトルバーが表示される)(*1)
  fm.Text = "aaa";
 }
 else {
  // タイトルに空文字を代入する。(タイトルバーが非表示になる)(*2)
  fm.Text = "";
 }
}

おおざっぱに書くとこんな動作をしたいと思っています。
このようにすると、*1は想定どおりの動作をするのですが、*2でエラーを起こして
止まってしまいます。
メッセージは以下のように出てました。

Attempted to read or write protected memory.
This is often an indication that other memory has been corrupted.

エラー内容は見てのとおりで、空文字を入れるのがメモリ違反らしいのですが、
空とは言え文字列自体を代入することがメモリ違反とは思えません。
(実際空以外の文字は代入できるのは確認できてます)
現在は無理やりラベルを挿入して似たようにしてますが、あまり見栄えが
よろしくないのでできればタイトルバーでやりたいと思います(好みの問題ですが)

どうにかしてタイトルバーを表示した状態から非表示に変更できないでしょうか?
どうかご教授よろしくお願いいたします。

ちなみに、環境はwindows2000SP4とC#2.0で作成しています。
(もしC#2.0のバグであれば泣くしかないですが 汗)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-26 11:37
コード:
private void button6_Click(object sender, System.EventArgs e) {
	this.ControlBox = !this.ControlBox;
	this.Text = (this.Text.Length == 0 ? "色々なフォーム表示のサンプル" : "");
}


このようなコードで、タイトルを付けたり消したりできるので、他の部分でエラーになる要因があると思います。
めー
会議室デビュー日: 2004/07/26
投稿数: 9
投稿日時: 2004-07-26 13:33
ご返答ありがとうございます。

引用:

private void button6_Click(object sender, System.EventArgs e) {
this.ControlBox = !this.ControlBox;
this.Text = (this.Text.Length == 0 ? "色々なフォーム表示のサンプル" : "");
}



この処理は自分のほうでも試してみましたが、問題なく動作しました。

この記述から自分の作成しようとした記述まで順に試したところ、
フォームに配置してたTextBoxがいたずらしてたみたいです。

前の書込みではタイトルバーの処理でエラーが出たので端折ってしまったのですが、
フォーム内にはTextBoxがMultiLine=true,Dock=Fillで配置されてました。
最初Dockの設定をはずしたところその場ではエラーがでなくなりましたが、
タイトルバーを非表示にした際になぜかサイズが1行分になってしまいました。
さらにそこで文字を入力しようとすると同じエラーが発生するので、
多分そのあたりに何かあるのだと思います。(詳しくはわかってませんが)

MultiLine=falseにすると問題なく動作したので、タイトルバーの切り替えの
前後で一時的にMultiLineを変更してやることで、とりあえずは動作させています。
お騒がせしました。
1

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