Antwort

2

Ich verwendete this Wizard Code in einem aktuellen Projekt und es hat gut funktioniert.

Es bietet die grundlegende Erfahrung, nach der Sie suchen.

17

Was Sie beschreiben, ist ein Assistent, und man könnte den Ansatz von Eric J.

jedoch untersuchen wollen, wenn ich Fälle, wo ich mehrere Platten im gleichen Raum in meinem UI und ich möchte wechseln haben wollen zwischen ihnen im Designer verwende ich gerne ein TabControl und verstecke die Tabs auf dem TabControl. Dies erleichtert die Verwaltung der Benutzeroberfläche zur Entwurfszeit, und der Code lässt sich zur Laufzeit relativ einfach zwischen den Registerkarten wechseln.

Ich habe ein benutzerdefiniertes Steuerelement erstellt, das von TabControl namens HiddenTabsControl abgeleitet wird, das sehr einfach ist. Die Klasse überschreibt nur WndProc und lässt die TabControl-Basisklasse alles andere behandeln.

  • Wählen Sie Custom Control,
  • Namen es so etwas wie HiddenTabsControl

    • ein neues Element zu Ihrem Projekt hinzufügen: Alles, was Sie tun müssen, ist.
    • Ändern Sie die Basisklasse in TabControl, entfernen Sie den Konstruktor und das OnPaint-Override, das Visual Studio hinzugefügt hat.
    • Kopieren Sie diese Überschreibung für WndProc in die Klasse:

      protected override void WndProc(ref Message m) 
      { 
          // Hide tabs by trapping the TCM_ADJUSTRECT message 
          if (m.Msg == 0x1328 && !DesignMode) 
          { 
           m.Result = (IntPtr)1; 
          } 
          else 
          { 
           base.WndProc(ref m); 
          } 
      } 
      

    Jetzt können Sie Registerkarten im Designer ändern und die UI-Design einfach und in dem Code können Sie Ereignisse behandeln Registerkarten nach Bedarf zu ändern. die ausgewählten Registerkarte Ändern ist leicht getan mit:

    this.hiddenTabsControl.SelectedTab = this.tabPageYouWantVisible; 
    

    Ein Nebeneffekt die Registerkarten zu entfernen, ist der Raum, dass die Tabs einnehmen, wenn die Steuer aufgebaut ist. Wenn Sie sie entfernen, ändert sich der von HiddenTabsControl belegte Platz, indem er verkleinert wird. Normalerweise setze ich den Anker des HiddenTabsControl auf den unteren Rand, damit er nicht schrumpft.

  • +0

    +1. Das ist eine wunderbare einfache Lösung. Sie können jedoch immer noch Tabs mit der Tastatur wechseln (Strg + Tab funktioniert definitiv und Pfeiltasten, wenn Sie den Fokus richtig platzieren). – Joey

    +1

    Sie möchten auch, dass die MultiLine-Eigenschaft immer auf 'true' gesetzt ist. Andernfalls werden die Pfeile zum Scrollen der Registerkartenleiste angezeigt, obwohl Sie nicht darauf klicken können. – Joey

    +0

    Diese Methode ist nicht mit Mono übertragbar. – Luca

    2

    Ein anderer, weniger eleganter, aber schneller Hack-Ansatz besteht darin, das Panel nicht einfach dem übergeordneten Formular bis zur Laufzeit hinzuzufügen. Der Designer hat dabei keine Ahnung, wo das Panel vor der Kompilierung liegt und wird nicht angezeigt.

    Zum Beispiel den Codeblock, in dem Sie Steuerelemente auf das übergeordnete Formular hinzuzufügen:

       //this->Controls->Add(this->panel_X); 
         this->Controls->Add(this->tabControl); 
         this->Controls->Add(this->menuStrip_topMenu); 
    

    Kommentar oder die Aussage entfernen, finden Sie den Griff auf das Ereignis, das auftritt, wenn das Formular geladen wird:

     this->Load += gcnew System::EventHandler(this, &MainForm::MainForm_Load); 
    

    Dann in der Definition der Event-Handler, fügen Sie das Steuerelement dem Formular:

    System::Void MainForm_Load(System::Object^ sender, System::EventArgs^ e) { 
    ... 
    ... 
    this->Controls->Add(this->panel_X); 
    } 
    

    Ich habe damit keine unerwünschten Nebenwirkungen erlebt, aber wenn jemand einen guten Grund dafür hat, würde ich mich dafür interessieren.

    Verwandte Themen