Frage

Ich schreibe eine alte Anwendung neu und nutze diese als gute Gelegenheit, C# und .NET-Entwicklung auszuprobieren (ich mache normalerweise viel Plug-in-Sachen in C).

Die Anwendung ist im Grunde genommen ein Timer, der Daten sammelt. Es gibt eine Startansicht mit einer Schaltfläche, um die Messung zu starten. Während der Messung hat die App fünf verschiedene Ansichten, je nachdem, welche Informationen der Benutzer sehen möchte.

Was ist die beste Praxis, um zwischen den Ansichten zu wechseln? Vom Anfang bis zum Laufen? Zwischen den Laufansichten?

Ideen:

  • Verwenden Sie eine Form und verstecken Sie und zeigen Sie Steuerelemente
  • Verwenden Sie ein Startformular und dann ein Formular mit einer tabcontrol
  • Verwenden Sie sechs separate Formulare
War es hilfreich?

Lösung

Das Erstellen einer Reihe von überlagerten Panels ist ein Albtraum für die Designzeit.

Ich würde empfehlen, eine Registerkarte mit jeder "Ansicht" auf einer separaten Registerkarte zu verwenden und dann zur Laufzeit die richtige Registerkarte zu wählen. Sie können es vermeiden, die Registerkarten -Headers anzuzeigen, indem Sie so etwas in das Ladeereignis Ihres Formulars einfügen:

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));

Andere Tipps

Ich habe ein Panel, in dem Ihre unterschiedlichen Ansichten auf der Hauptform sitzen. Erstellen Sie dann Benutzersteuerung für Ihre verschiedenen Ansichten.

Wenn ich dann zwischen A'View 'wechseln möchte, docken Sie es in das Hauptformular an das Panel. Der Code sieht ein bisschen so aus.

Ich bin dies vor, weil Sie Ihre Ansichten wiederverwenden können, z. B. wenn Sie eine Ansicht in einer Registerkarte öffnen möchten

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;
    }
}

Registerkartenformulare sind normalerweise gut ... aber nur, wenn der Benutzer jederzeit eine Ansicht sehen kann ... und es hört sich so an, als ob Sie es nicht könnten.

Separate Formulare funktionieren definitiv, aber Sie müssen sicherstellen, dass der Schalter scheinbar ist ... Wenn Sie sicherstellen, dass das neue Formular genauso Größe und Position des alten Formulars erscheint, sieht es so aus, als würde es für das Ändern der Steuerelemente gleich aussehen.

Die Methode, die ich häufig verwende, besteht darin, alle meine Steuerelemente auf einzelnen "Panel" -Kontrollen vorzulegen und diese Panels dann zu zeigen und zu verbergen, sobald ich sie brauche. Die "Panel" -Kontrolle ist im Grunde ein Steuerbehälter ... Sie können das Panel und alle Steuerelemente relativ bewegen. Und wenn Sie das Panel anzeigen oder verbergen, tun die Steuerelemente dasselbe. Sie eignen sich hervorragend für solche Situationen.

Die Methode, die ich häufig verwende, besteht darin, alle meine Steuerelemente auf einzelnen "Panel" -Kontrollen vorzulegen und diese Panels dann zu zeigen und zu verbergen, sobald ich sie brauche.

Anstatt jede Ansicht zu einem Panel in einer einzelnen Form zu machen, können Sie jede Ansicht zu einer Usercontrol machen. Erstellen Sie dann ein einzelnes Formular und schreiben Sie Code, um die richtige UserControl im Formular zu erstellen und anzeigen und um von einem zum nächsten zu wechseln. Dies wäre einfacher zu pflegen, da Sie für jede Ansicht eine separate Klasse haben, anstatt eine einzelne Formklasse mit jeweils 6 Panels mit ihren eigenen Steuerelementen - das scheint schwierig und fehleranfällig zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top