18

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

ツリービュー設定ダイアログの設計/コーディングを行うための最良の方法は何ですか?私がこれまで行ってきた方法は、左側にドッキングされたツリーコントロールを備えたメインウィンドウを構築することです。次に、ツリーの各ノードに対応するコンテナコントロールを作成しています。ノードが選択されると、アプリはそのノードの対応するコンテナコントロールを前面に移動し、適切な位置に移動して、メインウィンドウで最大化します。それを設計している間、これは本当に、本当に不格好に思えます。これは基本的に、デザイン時にメインウィンドウの端を超えて大量のコンテナコントロールがあり、それらを操作するにはメインウィンドウをスクロールし続ける必要があることを意味します。これが私がこれを書いている方法で完全に理にかなっているのかどうかはわかりませんが、おそらく私が話していることのこのビジュアルはもっと理にかなっているでしょう:

フォームデザイン

基本的に、私はこの巨大なフォームを操作し、コンテナコントロールをいたるところに配置してから、実行時の再フォーマットを実行して、すべてを機能させる必要があります。これは多くの余分な作業のようです。私はこれを完全に愚かな方法でやっていますか?私が見逃している、これを行うための「明白な」簡単な方法はありますか?

4

3 に答える 3

11

より適切な方法は、「ペイン」ごとに個別のフォームを作成し、各フォームコンストラクターで設定することです。

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

このようにして、これらの各フォームを独自のデザイナーでレイアウトし、実行時に1回以上インスタンス化して、通常のコントロールのように空の領域に追加することができます。

おそらく、メインフォームは、一方のパネルにSplitContainer静的なaを使用しTreeView、もう一方のパネルにこれらのフォームを追加するためのスペースを使用できます。それらが追加されると、Hide/ShowまたはBringToFront/SendToBackメソッドを使用してめくることができます。

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();
于 2008-08-06T18:02:31.480 に答える
2

グレッグ・ハールマンは次のように書いています。

グリッドでノードが選択されているときに、適切なコンテナーを表示/非表示にしないのはなぜですか? すべてのコンテナーを同じ場所に適切なサイズにし、ロード時にグリッドで事前に選択されるデフォルト以外のすべてを非表示にします。

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

各ノードのインターフェイスの設計を完全に分離できることを意味するため、Duncan の回答が気に入っています。これは、スナップのガイドラインやその他の設計時の利点について重複しないことを意味します。

于 2008-08-06T18:20:29.947 に答える
0

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

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

コントロールへの/からの値のロード/保存をどのように処理するつもりなのか、少し興味がありますか? すべてのページが 1 つの大きなフォームにある場合、1 つのクラスに多くのコードが必要ですか?

もちろん、さらに別の方法として、各ページが要求されるたびに、設定の種類に関する情報を使用して、GUI コードを生成することもできます。

于 2008-08-14T15:13:40.183 に答える