2008-08-06 8 views
13

私は、基本的に単なる環境設定ダイアログであるアプリケーションを作成しています。これは、Visual Studio自体が使用するツリービューの環境設定ダイアログによく似ています。アプリケーションの機能は、シリアルデバイスからファイルへのデータのパススルーにすぎません。データをファイルに書き込む前に、データに対して多数の変換を実行するので、アプリケーションのGUIは、変換が何をすべきかを指示するすべての設定にすぎません。C#でツリービューの設定ダイアログを作成するには?

ツリービューの設定ダイアログを設計/コーディングするにはどうすればよいですか?私がそれについて行ってきたやり方は、左側にドッキングされたツリーコントロールでメインウィンドウを構築することです。次に、ツリーの各ノードに対応するコンテナコントロールを作成しています。ノードが選択されると、アプリケーションはそのノードの対応するコンテナコントロールを前面に移動し、それを正しい位置に移動し、メインウィンドウで最大化します。これは本当に、それを設計している間本当にclunkyようです。基本的には、設計時にメインウィンドウの端を越えてコンテナコントロールがたくさんあることを意味し、メインウィンドウをスクロールして作業する必要があります。これは完全に私はこれを書いている方法は理にかなって、多分私が話している何のためにこの視覚的にはより多くの意味をなすかどうかはわからない:

form design

を基本的に私はこれで仕事をしなければなりません巨大なフォーム、コンテナコントロールを全面的に備えています。その後、すべての動作をさせるために実行時の再フォーマットを行います。これは余分な仕事ののlotのようです。私はこれをまったくばかげたやり方でやっていますか?私が行方不明になっているいくつかの「明白な」簡単な方法がありますか?

答えて

10

整然と方法は、各「ペイン」と、各フォームのコンストラクタで、

this.TopLevel = false; 
this.FormBorderStyle = FormBorderStyle.None; 
this.Dock = DockStyle.Fill; 

をそのように設定するための別のフォームを作成し、これらの形態のそれぞれが独自のデザイナーにレイアウトすることができ、1をインスタンス化実行時に複数回実行され、通常のコントロールのように空の領域に追加されます。

メインフォームでは、TreeViewの静的な1つのパネルでSplitContainerを使用し、これらのフォームを別のパネルに追加することができます。それらが追加されると、Hide/ShowまたはBringToFront/SendToBackメソッドを使用して反転させることができます。

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show(); 
2

グレッグHurlmanが書いた:

を理由だけではなく、ノードがグリッドで選択されている場合、適切なコンテナを表示/非表示にしませんか?すべてのコンテナを同じ場所に適切にサイズ設定し、既定以外のすべてを非表示にします。これは、ロード時にグリッド内であらかじめ選択されています。

残念ながら、それは私が避けようとしていることです。私は、実行時に動作させるのに必要なコードを最小限に再フォーマットするだけで、設計時にインターフェイスを扱う簡単な方法を探しています。

私はダンカンの答えが好きです。というのも、各ノードのインターフェイスのデザインは、を完全にに分けておくことができるからです。つまり、スナップガイドラインやその他の設計時間の長所に重複することはありません。

0

おそらく、CustomControlを継承する基本クラスに基づいていくつかのパネルクラスを作成します。これらのコントロールにはSave/Loadやそのようなメソッドがあります。もしそうなら、私はこれらのパネルをそれぞれ別々に設計することができます。

デザイナーで次にクリックしてすべてのページをデザイナーで一度にデザインできるように、デザインモードで複数のページを処理するウィザードコントロールを使用しました。これにはコードをコントロールに接続するときにいくつかの欠点がありましたが、デザイナークラスをいくつか構築することで同様の設定ができることを意味します。私はVSでどのデザイナークラスも書かなかったので、それをどのようにして、それが価値あるのかを言うことはできません:-)

私は値のロード/保存をどのように扱うのかちょっと不思議です/コントロールから?すべてのページが1つの大きなフォームにある場合、1つのクラスに多くのコードが必要ですか?

さらに別の方法では、各ページが要求されるときに、どのタイプの設定があるかに関する情報を使用してguiコードを生成することがもちろんあります。

関連する問題