C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: VisualStudioのオプションのようなダイアログを作成


(過去ログ 49 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■26652 / inTopicNo.1)  VisualStudioのオプションのようなダイアログを作成
  
□投稿者/ 麦 (4回)-(2008/10/16(Thu) 16:39:12)

分類:[C#] 

お世話になります。
VisualStudio2005 C#にて開発を行っています

VisualStudio2005のツール→オプションのようなダイアログを作成したいと考えています。
 (ダイアログ左のリストの選択により、右側の表示が変更されるダイアログ)
しかし、作成の仕方がわかりません。
このようなコントロールが存在するのでしょうか。

また、それが無い場合は以下のような手順でよろしいでしょうか。

 ツリービューとタブコントロールを貼り付け、
 タブコントロールのタブを消して、ツリービューの選択イベントによってタブコントロールを制御する。

これだと、なんだか無理やりな気がします・・・
ほかにスマートな方法がありましたらどなたかご教示願います。
引用返信 編集キー/
■26656 / inTopicNo.2)  Re[1]: VisualStudioのオプションのようなダイアログを作成
□投稿者/ PATIO (148回)-(2008/10/16(Thu) 17:18:38)
No26652 (麦 さん) に返信
> VisualStudio2005のツール→オプションのようなダイアログを作成したいと考えています。
>  (ダイアログ左のリストの選択により、右側の表示が変更されるダイアログ)
> しかし、作成の仕方がわかりません。
> このようなコントロールが存在するのでしょうか。

無いと思います。
内容的には既存の組合せで出来る範囲ですし。


> また、それが無い場合は以下のような手順でよろしいでしょうか。
>
>  ツリービューとタブコントロールを貼り付け、
>  タブコントロールのタブを消して、ツリービューの選択イベントによってタブコントロールを制御する。
>
> これだと、なんだか無理やりな気がします・・・
> ほかにスマートな方法がありましたらどなたかご教示願います。

タブコントロールは必要無いと思いますけれど。
必要な画面をそれぞれダイアログで作成しておいてタイトルバー等をなしでリソースを作成、
後はツリーコントロール上のどれを選択しているかで表示するダイアログを変更するだけだと思います。
表示位置さえ制御すれば同じような画面になるでしょうし、
タイトルバーも画面の枠も表示しなければ、土台のダイアログと一体に見えるので
何とでも出来そうです。
後は、各ダイアログのクラスに制御用のコードを書いて必要な値を取り出す為の関数を用意しておけば、
土台のダイアログから制御できそうな気がします。
標準に用意されている物以外は結構泥臭い制御が必要になると思いますよ。

引用返信 編集キー/
■26672 / inTopicNo.3)  Re[2]: VisualStudioのオプションのようなダイアログを作成
□投稿者/ Azulean (212回)-(2008/10/16(Thu) 23:47:22)
C#なので、ダイアログではなく、ユーザコントロールが相当するかな。

ユーザコントロールとしてばらして画面を作っておいて、フォームにツリーコントロールと複数のユーザコントロールを貼り付ける。
ツリーの選択によってユーザコントロールの表示・非表示を切り替えれば見た目としてはそれらしくできるかな?

もちろん、ユーザコントロールとせずにパネルでがんがん置いていってもいいですが、分かりにくいかもしれません。
引用返信 編集キー/
■26691 / inTopicNo.4)  Re[1]: VisualStudioのオプションのようなダイアログを作成
□投稿者/ たくボン (54回)-(2008/10/17(Fri) 14:19:40)
No26652 (麦 さん) に返信
> お世話になります。
> VisualStudio2005のツール→オプションのようなダイアログを作成したいと考えています。

1.まず、データの取得(LoadData)と保存(SaveData)のvirtualメソッドを持つUserControlを作成(仮にOptionPageとでも)。
2.OptionPage継承した各オプションページを作成。LoadData(), SaveData()をorverrideしておく。
3.TreeVirwのAfterSelect()にこんな感じで動的に実装。


private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
	// 現在のオプションページのデータを保存する
	if (panel1.Controls.Count > 0 && panel1.Controls[0] is OptionPage)
	{
		((OptionPage)panel1.Controls[0]).SaveData();
	}

	panel1.Controls.Clear();
	
	if (treeView1.SelectedNode.Text == "フォント")
	{
		panel1.Controls.Add(new OptionPageFont());
	}
	else if (treeView1.SelectedNode.Text == "ほげ")
	{
		panel1.Controls.Add(new OptionPageHoge());
	}

	// 新しく配置されたオプションページのデータ読み込み
	if (panel1.Controls.Count > 0 && panel1.Controls[0] is OptionPage)
	{
		((OptionPage)panel1.Controls[0]).LoadData();
	}
}


※ページが増えるとダラダラになるので、私はSimple Factoryにして生成の部分(LoadDataもSaveDataも
OptionPageの生成・破棄に関わる部分なので、Factory側で制御)を分離しています。
エクスプローラーのフォルダNodeように同じ属性を持つTreeNodeがたくさんある場合は、TreeNodeも継承
して実装しています。


引用返信 編集キー/
■26693 / inTopicNo.5)  Re[3]: VisualStudioのオプションのようなダイアログを作成
□投稿者/ 麦 (5回)-(2008/10/17(Fri) 15:00:27)
お二方、ご回答有難うございます。

ダイアログ上にダイアログを表示する方法、
ユーザーコントロールを使用する方法をそれぞれ試してみたいと思います。

お恥ずかしい話ですが、
ダイアログ上にダイアログを表示できることや、
ユーザーコントロールの存在などをはじめて知りました。
重ねて御礼申し上げます。
解決済み
引用返信 編集キー/
■26695 / inTopicNo.6)  Re[2]: VisualStudioのオプションのようなダイアログを作成
□投稿者/ PATIO (149回)-(2008/10/17(Fri) 15:47:15)
すいません、C#でしたね。
VC++のつもりで書いてしまいした。

解決済み
引用返信 編集キー/
■26735 / inTopicNo.7)  Re[3]: VisualStudioのオプションのようなダイアログを作成
□投稿者/ 麦 (6回)-(2008/10/20(Mon) 11:03:13)
No26695 (PATIO さん) に返信
> すいません、C#でしたね。
> VC++のつもりで書いてしまいした。

ということはC#では実現できないということでしょうか。
ともあれ、今後の参考にさせていただきます。
ありがとうございました。


No26691 (たくボン さん) に返信
UserControlの実装方法を細かくありがとうございます。
まだオブジェクト指向について勉強中なので、
詳細や注意点などと書いていただけて非常に助かります。

解決済み
引用返信 編集キー/
■26803 / inTopicNo.8)  Re[4]: VisualStudioのオプションのようなダイアログを作成
□投稿者/ PATIO (150回)-(2008/10/21(Tue) 14:26:55)
No26735 (麦 さん) に返信
> ■No26695 (PATIO さん) に返信
>>すいません、C#でしたね。
>>VC++のつもりで書いてしまいした。
>
> ということはC#では実現できないということでしょうか。

C#で実現する方法としては既にお二方が挙げられているユーザーコントロールとか
パネルを使った方が一般的なのだと思います。
VC++の場合ですとタイトルバーと枠がないダイアログで実現する事が多いと思います。

この辺は一般論なので出来ない事は無いと思いますけれど、
C#の場合は、よりベターな方法が用意されていると考えた方が良いと思います。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -