Tabpages in Klassen auslagern zur Übersicht?

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Schamash.

    Tabpages in Klassen auslagern zur Übersicht?

    Hey Community!

    Ich habe demnächst vor ein größeres Projekt zu machen, und auf der Mainform wird ein TabControl mit etwa 7 Tabs sein. Nun kann es aaber gut sein, dass pro Tabpage 300 Codezeilen anfallen werden und das alles dann in der FormClass scheint mir schlecht gelöst.
    Wäre es jetzt am schlausten, die Tabpages einzeln in Klassen auszulagern und dann in der MainForm nur zu schreiben: TabControl1.Tabpages.Add(New CertainTabpageXYZ ? Oder gibt es schlauere Lösungen? :)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    Tabpages einzeln in Klassen auszulagern
    Jou.
    Erstell Dir eine von TabPage abgeleitete Klasse und füge sie so in das TabControl ein:

    VB.NET-Quellcode

    1. Me.TabControl1.Controls.Add(New MyTabPage)
    Mach Dir ein Testprojekt mit TabControl im Designer und sieh in der Prouedur InitializeComponents() nach, wie Du das gestalten kannst.
    Oder
    Mach Dir ein UserControl und ändere danach das

    VB.NET-Quellcode

    1. Inherits System.Windows.Forms.UserControl
    in

    VB.NET-Quellcode

    1. Inherits System.Windows.Forms.TabPage
    und streich diese Zeilen ersatzlos:

    VB.NET-Quellcode

    1. Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
    2. Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany::
    Alles klar, warum soll ich mir aber die InitializeComponents Sub anschauen? Vllt erscheint mir das auch nur jetzt grade komisch weil ich keinen Zugriff auf VS hab.


    Deine zweites Beispiel verstehe ich aber nicht. Warum sollte ein TabControl von einer Tabpage erben?

    Also eine TabPage als Control?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    InitializeComponents
    Da steht drin, wie Du die entsprechenden Properties setzen musst.
    Ein TabPage-Control ist im Designer so nicht enthalten, deswegen über Umwege.
    UserControl as TabPage - xxx.Designer.vb

    VB.NET-Quellcode

    1. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    2. Partial Class UserControl1
    3. Inherits System.Windows.Forms.TabPage
    4. 'UserControl überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
    5. <System.Diagnostics.DebuggerNonUserCode()> _
    6. Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    7. Try
    8. If disposing AndAlso components IsNot Nothing Then
    9. components.Dispose()
    10. End If
    11. Finally
    12. MyBase.Dispose(disposing)
    13. End Try
    14. End Sub
    15. 'Wird vom Windows Form-Designer benötigt.
    16. Private components As System.ComponentModel.IContainer
    17. 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
    18. 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
    19. 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
    20. <System.Diagnostics.DebuggerStepThrough()> _
    21. Private Sub InitializeComponent()
    22. Me.Button1 = New System.Windows.Forms.Button()
    23. Me.CheckBox1 = New System.Windows.Forms.CheckBox()
    24. Me.SuspendLayout()
    25. '
    26. 'Button1
    27. '
    28. Me.Button1.Location = New System.Drawing.Point(15, 4)
    29. Me.Button1.Name = "Button1"
    30. Me.Button1.Size = New System.Drawing.Size(75, 23)
    31. Me.Button1.TabIndex = 0
    32. Me.Button1.Text = "Button1"
    33. Me.Button1.UseVisualStyleBackColor = True
    34. '
    35. 'CheckBox1
    36. '
    37. Me.CheckBox1.AutoSize = True
    38. Me.CheckBox1.Location = New System.Drawing.Point(15, 34)
    39. Me.CheckBox1.Name = "CheckBox1"
    40. Me.CheckBox1.Size = New System.Drawing.Size(81, 17)
    41. Me.CheckBox1.TabIndex = 1
    42. Me.CheckBox1.Text = "CheckBox1"
    43. Me.CheckBox1.UseVisualStyleBackColor = True
    44. '
    45. 'UserControl1
    46. '
    47. Me.Controls.Add(Me.CheckBox1)
    48. Me.Controls.Add(Me.Button1)
    49. Me.Name = "UserControl1"
    50. Me.Size = New System.Drawing.Size(145, 150)
    51. Me.ResumeLayout(False)
    52. Me.PerformLayout()
    53. End Sub
    54. Friend WithEvents Button1 As System.Windows.Forms.Button
    55. Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox
    56. End Class
    UserControl as TabPage - xxx.vb

    VB.NET-Quellcode

    1. Public Class UserControl1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. End Sub
    4. Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    5. End Sub
    6. End Class

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Gut ich danke dir, werde ich nachher testen!

    Edit: Wie hätte ich denn bei einer normalen Klasse Buttons etc hinzugefügt?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ThePlexian“ ()

    ich halte die Idee mit abgeleiteter TabPage für sehr fragwürdig.
    Wie plaziert man darauf die Controls? - hat man da ühaupt einen Designer?
    In welcher Datei landet dann der CodeBehind?

    Vor allem würde ich sone CustomTabpage nicht UserControl nennen, denn UserControl ist bereits ein wichtiges Control des Frameworks.

    Was ich auch gleich empfehlen würde: @ThePlexian:: Erstelle pro TabPage ein UserControl - das lässt sich designen wie ein Form.
    Auffm HauptForm ein normales TabControl, und auf jeder Tabpage ist nur genau ein Control - nämlich das vorgesehene UserControl.
    @ErfinderDesRades
    Interessanter Ansatz, das mit UserControl auf TabPage.
    Wie gehe ich dann mit Dataset um? Musss das dann im jeweiligen UserControl dann Public gemacht werden, damit ich es registrieren kann?
    Leg doch einfach Formen auf das TabControl:

    VB.NET-Quellcode

    1. Private frm_NeueForm As Form
    2. frm_NeueForm = New "Form die Auf dem TabControl angezeigt werden soll"
    3. frm_NeueForm.TopLevel = False
    4. frm_NeueForm.Dock = DockStyle.Fill
    5. Tbc_Seitenansicht.TabPages.Add(frm_NeueForm.Text)
    6. Tbc_Seitenansicht.SelectedTab = Tbc_Seitenansicht.TabPages(Tbc_Seitenansicht.TabPages.Count - 1)
    7. frm_NeueForm.Parent = Tbc_Seitenansicht.TabPages(Tbc_Seitenansicht.TabPages.Count - 1)
    8. frm_NeueForm.Show()
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    us4711 schrieb:

    Wie gehe ich dann mit Dataset um? Musss das dann im jeweiligen UserControl dann Public gemacht werden, damit ich es registrieren kann?
    Genau.
    Damit hast du zwar eine sehr schöne Architektur, aber hast ebenso auch formübergreifendes Databinding am Hals, was du immerhin mit meine Registrier-Technik lösen kannst.
    Also myDataset.Register(me) im Form-Konstruktor wühlt alle UserControls durch, und schaltet die Datasetse gleich.

    @Schamash:: warum sollte das einfacher sein, als ein UserControl?
    UserControl ist dazu da, eingefügt zu werden - hat auch Designer-Unterstützung dafür.

    Form ist nicht dazu da - ein Form soll man eiglich wegklicken können, und am Titelbalken draggen, und Resizen und sowas.
    @ErfinderDesRades
    In dem Fall hab ich in meinem Aktuellen Tool Falscherweise mit Formen gearbeitet wo ich UserControls hätte nutzen sollen. Ich werde mir das mal anschauen. Habe mit denen nämlich nicht nicht gearbeitet.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    userControl und Forms sind sich sehr ähnlich.
    Ich hab sogar schomal Forms im Designercode einfach umdeklariert also aus Inherits Form habich Inherits UserControl gemacht.
    Paar Fehlerzeilen entstanden, die einfach zu löschen waren - und dann wars ein UserControl :D

    (aber Backup machen bevor so Übungen)
    (Oder guck in vier Views-Videos - Film3, wie man Forms duplizieren kann, dann kannst du eines davon getrost verwüsten)

    ErfinderDesRades schrieb:

    Wie plaziert man darauf die Controls? - hat man da ühaupt einen Designer?
    Siehe Post #2, das funktioniert.
    Hab's nämlich unverschämterweise einfach ausprobiert.
    Ansonsten direkt je ein UserControl auf jede TabPage.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ErfinderDesRades

    Ich hab gerade mal ein bisschen mit UserControls rumgespielt. Gefällt mir gut. Werde ich übernehmen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."