Tabcontrol Problem -> Hilfe

  • Allgemein

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    Tabcontrol Problem -> Hilfe

    Hey :D



    Habe ein komisches Problem mit der Tabcontrol

    Wenn man auf Button 1 Klickt soll eine neue Tabseite mit einem DatetimePicker und eine Checkebox hinzugefügt werden

    Wenn ich dann auf Button2 Klicke soll Die Zeit des DatetimePicker der angeklickten tabseite in einem Laber ausgegegeben werden.

    Ohne die Checkbox in den Tabseiten kann ich den datetimepicker auch ansprechen mit:

    Quellcode

    1. For Each Picker As DateTimePicker In Me.TabControl1.SelectedTab.Controls
    2. Zeit = Test_1
    3. Next


    aber mit

    Quellcode

    1. TabControl1.SelectedTab.Controls(0).value


    Gehts Net (sollte eigentlich)



    Wenn ICh die Checkbox und den Datetimepicker in der Tabseite hab kann ich auch mit der for schleife

    sowohl die checkbox als auch den datetimepicker nicht ansprechen :cursing:



    BRAUCH HILFE ?(

    MfG





    Ganzer Code

    Quellcode

    1. Public Class Form1
    2. Dim Zeit As DateTimePicker
    3.  
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadTabControl1.TabPages.Clear()
    5. End Sub
    6.  
    7.  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    8. Dim tab As TabPage = New TabPage(Name)
    9. Dim Picker As DateTimePicker = New DateTimePicker
    10. Dim Checker As CheckBox = New CheckBox
    11. tab.Controls.Add(Picker)
    12. tab.Controls.Add(Checker)
    13. Me.TabControl1.TabPages.Add(tab)
    14. End Sub
    15.  
    16.  
    17.  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickFor Each Test_1 As DateTimePicker In Me.TabControl1.SelectedTab.Controls
    18. Zeit = Test_1
    19. Next
    20. Label1.Text = Zeit.Value.ToString
    21. TabControl1.SelectedTab.Controls(0).value()End Sub
    22. End Class
    Hallo Stefan,
    Du schlägst Dich offenbar gerade mit dynamisch erzeugten Controls rum, diese haben nunmal ein paar Stolpersteine.

    Die Control.Controls Property ist eine Container Eigenschaft die jede Klasse besitzt die von der Control-Klasse abgeleitet ist (Textbox, Label, Groupbox, Panel, Form), wobei sie allerdings nicht bei allen Sinn macht (Label). Sie ist ausgeführt als ControlCollection, d.h. man kann dort alle Arten von Controls hinzufügen, nicht aber zum Beispiel einen Timer.

    Dummerweise bedeutet das aber auch, daß wenn man ein Element aus dieser Collection abruft, auch ein Element vom Typ Control zurückerhält. Man kann zwar alle Eigenschaften der Basisklasse abrufen, will man aber auf die speziellen Eigenschaften eines DateTimePicker zurückgreifen, so muss man casten, sprich den Control Typ in den DateTimePicker Type umwandeln.

    Deswegen sind auch alle Deine Beispiele falsch: die DateTimePicker.Value Eigenschaft gibt es für die Control-Klasse nicht und Du kannt nicht darauf zugreifen. Mach es wie folgt:

    VB.NET-Quellcode

    1. Dim dtp as DateTimePicker = directCast( TabControl1.SelectedTab.Controls(0), DateTimePicker) ' control zu Datetimepicker casten
    2. dtp.value = ...


    Noch einfacher ist es, wenn Du Deinen Controls Namen gibst, dann kannst Du sie in der Controls Collection direct ansprechen:

    VB.NET-Quellcode

    1. ' datetimepicker mit namen anlegen
    2. Dim dtp As New DateTimePicker With {.Name = "dtp1"}
    3. ' zur form hinzufügen
    4. Me.Controls.Add(dtp)
    5. .......
    6. ' wieder abrufen
    7. Dim d As DateTimePicker = DirectCast(Me.Controls("dtp1"), DateTimePicker)