2010-03-24 18 views
5

Buduję mały formularz C# z kartami i chciałbym, aby każda strona z kartami miała kilka wspólnych funkcji, w szczególności przycisk OK i komunikat o błędzie oraz miejsce dla konkretnego utwórz pola.Tworzenie niestandardowego formantu TabPage w C#

Czy ktoś inny zrobił coś podobnego i jak do niego doszło?

+0

Przycisk OK na każdej stronie? –

+1

Niewłaściwie odpowiedź, ale myślę, że zrobię test rozszerzający oryginalną stronę tab, dodając wspólne cechy, których potrzebujesz – michele

Odpowiedz

7

Jest to łatwe do zrobienia bez rozszerzenia TabControl/TabPage.

Zdefiniuj jedną kontrolkę UserControl i umieść na niej odpowiednie elementy wspólne na każdej karcie TabPage.

Na formularzu: dalej i zaprojektuj kontrolki TabPage, które chcesz dla każdej TabPage: upewnij się, że nie będą się nakładać wizualnie ze zwykłymi kontrolkami po dodaniu UserControl.

w przypadku Form Load głównym formularzu zrobić coś takiego:

// form scoped variable to hold a referece to the current UserControl 
    private UserControl1 currentUserControl; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     foreach(TabPage theTabPage in tabControl1.TabPages) 
     { 
      currentUserControl = new UserControl1(); 

      theTabPage.Margin = new Padding(0); 
      theTabPage.Padding = new Padding(0); 

      theTabPage.Controls.Add(currentUserControl); 

      currentUserControl.Location = new Point(0,0); 

      currentUserControl.Dock = DockStyle.Fill; 

      currentUserControl.SendToBack(); 
     } 
    } 

Choć „SendToBack naprawdę nie jest wymagana tu jest«ubezpieczenie», że UserControl z” przyciskiem porządku i TextBox dla komunikatu o błędzie znajduje się za poszczególnymi kontrolkami przypisanymi do każdej strony TabPage.

+1

Ci z was, którzy głosują za odrzuceniem: zrozumienie, dlaczego nie lubimy tego rozwiązania, byłoby bardzo cenne. dzięki, – BillW

+0

@BillW Właściwie, jakiś tyłek oznaczył to jako spam. Teraz nie wiem, czy to dobra odpowiedź, ale wiem, że to nie jest spam. Więc +1, aby nadrobić straty rep i zneutralizować pozycję odpowiedzi. –

+0

Witam, BillW, Podoba mi się to rozwiązanie. Wiem, że oznacza to, że tracę wsparcie projektanta w kategoriach "widzenia" kontroli, ale myślę, że to dobrze działa, dzięki. –

2

Kilka pomysłów:

  • Przechowywać wspólne kontrole poza tabpanel;
  • Poszerz TabPage/TabControl
  • Utwórz podstawową kontrolę UserControl za pomocą wspólnych przycisków i utwórz elementy sterujące, które ją dziedziczą. Następnie umieść jedno dziedziczone sterowanie użytkownika na zakładce TabPage.
Powiązane problemy