9

私は古いアプリケーションを書き直しており、これを C# と .NET 開発を試す良い機会として使用しています (私は通常、C で多くのプラグインを実行します)。

アプリケーションは、基本的にデータを収集するタイマーです。測定を開始するためのボタンを備えた開始ビューがあります。測定中、ユーザーが見たい情報に応じて、アプリには 5 つの異なるビューがあります。

ビューを切り替えるベスト プラクティスは何ですか? 開始から実行まで?実行中のビューの間?

アイデア:

  • 1 つのフォームを使用し、コントロールの表示と非表示を切り替える
  • 1 つの開始フォームを使用してから、TabControl を含むフォームを使用します
  • 6 つの別々のフォームを使用する
4

5 に答える 5

8

オーバーレイされたパネルの束を作成することは、設計時の悪夢です。

別々のタブの各「ビュー」でタブコントロールを使用し、実行時に正しいタブを選択することをお勧めします。フォームのLoadイベントに次のようなものを入れることで、タブヘッダーの表示を回避できます。

tabControl1.Top = tabControl1.Top - tabControl1.ItemSize.Height;
tabControl1.Height = tabControl1.Height + tabControl1.ItemSize.Height;
tabControl1.Region = new Region(new RectangleF(tabPage1.Left, tabPage1.Top, tabPage1.Width, tabPage1.Height + tabControl1.ItemSize.Height));
于 2008-08-25T00:43:07.200 に答える
7

私がしていることは、さまざまなビューがメインフォームに配置されるパネルを持つことです。次に、さまざまなビューのユーザー コントロールを作成します。

次に、「ビュー」を切り替えたいときは、メイン フォームのパネルにドッキングします。コードは次のようになります。

タブでビューを開きたい場合は、タブページ内にユーザーコントロールをドッキングしたり、ユーザーコントロールの代わりにタブページから継承して、物事をもう少し一般的にすることができます。

public partial class MainForm : Form
{
    public enum FormViews
    {
        A, B
    }
    private MyViewA viewA; //user control with view a on it 
    private MyViewB viewB; //user control with view b on it

    private FormViews _formView;
    public FormViews FormView
    {
        get
        {
            return _formView;
        }
        set
        {
            _formView = value;
            OnFormViewChanged(_formView);
        }
    }
    protected virtual void OnFormViewChanged(FormViews view)
    {
        //contentPanel is just a System.Windows.Forms.Panel docked to fill the form
        switch (view)
        {
            case FormViews.A:
                if (viewA != null) viewA = new MyViewA();
                //extension method, you could use a static function.
                this.contentPanel.DockControl(viewA); 
                break;
            case FormViews.B:
                if (viewB != null) viewB = new MyViewB();
                this.contentPanel.DockControl(viewB);
                break;
        }
    }

    public MainForm()
    {

        InitializeComponent();
        FormView = FormViews.A; //simply change views like this
    }
}

public static class PanelExtensions
{
    public static void DockControl(this Panel thisControl, Control controlToDock)
    {
        thisControl.Controls.Clear();
        thisControl.Controls.Add(controlToDock);
        controlToDock.Dock = DockStyle.Fill;
    }
}
于 2008-09-23T16:38:12.660 に答える
3

通常、タブ付きフォームは適切です...ただし、ユーザーがいつでも任意のビューを表示できるようにしたい場合に限ります...そして、そうしないように思えます。

別々のフォームは間違いなく機能しますが、スイッチがシームレスであることを確認する必要があります...新しいフォームが古いフォームと同じ正確なサイズと位置に表示されることを確認すると、コントロールを変更しても同じように見えます.

私がよく使用する方法は、実際には、個々の「パネル」コントロールにすべてのコントロールを事前にセットアップしてから、必要に応じてこれらのパネルを表示または非表示にすることです。「パネル」コントロールは基本的にコントロール コンテナーです。パネルを移動すると、その上のすべてのコントロールが相対的に移動します。パネルを表示または非表示にすると、パネル上のコントロールも同じように動作します。このような状況に最適です。

于 2008-08-24T16:42:17.450 に答える
1

私がよく使用する方法は、実際には、個々の「パネル」コントロールにすべてのコントロールを事前にセットアップしてから、必要に応じてこれらのパネルを表示または非表示にすることです。

各ビューを 1 つのフォーム内のパネルにする代わりに、各ビューを UserControl にすることができます。次に、単一のフォームを作成し、コードを記述して、フォームに正しい UserControl を作成して表示し、あるフォームから次のフォームに切り替えます。これは、独自のコントロールを持つ 6 つのパネルを持つ単一の Form クラスの代わりに、ビューごとに個別のクラスを持つことになるため、保守が容易になります。これは、保守が難しく、エラーが発生しやすいようです。

于 2008-08-24T23:51:51.380 に答える
0

また、WPFまたはSmart Client Software Factoryの複合アプリケーション ガイダンスもチェックします。

于 2008-09-23T15:57:56.593 に答える