Über die Texteingabe auf die Klasse zugreifen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Über die Texteingabe auf die Klasse zugreifen

    Moin, ich steh noch am Anfang und hab ein Problem:

    Ich hab eine Klasse "Auto" mit verschiedenen Eigenschaften wie der Marke oder die PS und eine Function "ausgabe" bei der alle Informationen in einem Label ausgegeben werden.

    In einer zweiten Klasse habe ich beispielsweise:

    Private r As Auto = New Auto("Porsche", "911", "300", "1000") und weitere.

    Jetzt will ich in eine Textbox "r" eingeben und die Function darauf anwenden können.

    Ich hoffe ich hab das verständlich erklärt.


    Danke im Voraus.

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hi
    schau dir mal System.Collections.Generic.Dictionary(Of TKey, TValue) an:

    VB.NET-Quellcode

    1. Dim dct As New System.Collections.Generic.Dictionary(Of String, Auto)()
    2. dct.Add("r", new Auto(...))'Element mit Schluessel "r" hinzufuegen
    3. Dim auto As Auto = dct("r") 'Element mit Schluessel "r" ermitteln


    Gruß
    ~blaze~
    @~blaze~

    Er schreibt, dass er noch ein ziemlicher Neuling ist. Ich denke, das wäre jetzt etwas overkill, meinst nicht?

    Ahh, Müll ey. Sorry blaze. Ich hab die Fragestellung des TE falsch verstanden. Vergiss meinen Post.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

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

    Ähm, jetzt bin ich verwirrt. Ich hab meinen Post gelöscht, da ich dachte, ich hab Dich falsch verstanden. Jetzt nutzt Du doch meinen Ansatz, obwohl ich immer noch denke, dass der Ansatz von blaze eigentlich das ist, was Du wissen willst.

    Aber gut:

    Du musst in Deiner Form _anotherClass bekannt machen:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _anotherClass As New AnotherClass
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. If Me.TextBox1.Text = "r" Then
    5. Me.Label1.Text = _anotherClass.dasAuto.ToString()
    6. End If
    7. End Sub
    8. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Also das ist so: Du hast dasAuto vmtl. auf instanzweiter Ebene deklariert. D.h. jedes Auto besitzt ein Attribut Auto. Das macht natürlich wenig Sinn, da du ja eigentlich ein Auto definieren möchtest und nicht ein spezielles Auto eines Autos oder so.

    Auch wenn's nicht empfehlenswert ist, das so zu lösen, sei es trotzdem zur Veranschaulichung gezeigt (unten siehst du dann die "bessere" Variante):

    VB.NET-Quellcode

    1. Public Class Auto
    2. Private _markenName As String
    3. Public Sub New(ByVal markenName As String)
    4. _markenName = markenName
    5. End Sub
    6. Public ReadOnly Property MarkenName As String
    7. Get
    8. return _markenName
    9. End Get
    10. End Property
    11. Private Shared Readonly _irgendeinAuto As Auto
    12. 'Somit kannst du darauf per Auto.IrgendeinAuto zugreifen
    13. Public Shared ReadOnly Property IrgendeinAuto As Auto
    14. Get
    15. If _irgendeinAuto is Nothing Then 'Existiert das Auto noch nicht, so wird es bei der ersten Abfrage erzeugt
    16. _irgendeinAuto = New Auto("Porsche")
    17. End If
    18. Return _irgendeinAuto
    19. End Get
    20. End Property


    In einem Dictionary kapselst du das dann so:

    VB.NET-Quellcode

    1. Dim dct As New Dictionary(Of String, Auto)()
    2. dtc.Add(Auto.IrgendeinAuto.MarkenName, Auto.IrgendeinAuto)


    und über dtc("Porsche") kannst du es dann abrufen.

    Jetzt zur schöneren Variante:

    VB.NET-Quellcode

    1. Dim dtc As New Dictionary(Of String, Auto)()
    2. dtc.Add("Porsche", New Auto("Porsche", ...)) 'Eintraege mit Werten hinzufuegen
    3. dtc.Add("Maserati", New Auto("Maserati", ...))


    (als Anmerkung: bei der obigen Darstellung kannst du auch System.Collection.ObjectModel.KeyedCollection(Of TKey, TValue) verwenden, da die Schlüssel mit einem Eintrag übereinstimmen. Ich gehe allerdings davon aus, dass es bei dir nicht so sein wird.)

    Anschließend kannst du eben per dtc(Schluessel) auf die Werte zugreifen. Das Dictionary solltest du auf der Instanzebene vmtl. der Form deklarieren und im Konstruktor oder Load-Ereignis-Behandler instanzieren und mit Werten befüllen. Da das Dictionary eine Fehlermeldung wirft, wenn ein Wert nicht gefunden wurde, wäre TryGetValue zu empfehlen:

    VB.NET-Quellcode

    1. Dim value As Auto
    2. If dtc.TryGetValue(TextBox1.Text, value) Then
    3. MessageBox(value.ToString())
    4. Else
    5. MessageBox("Ungültiger Wert.")
    6. End If


    Gruß
    ~blaze~

    Kalle46 schrieb:

    Jetzt will ich in eine Textbox "r" eingeben und die Function darauf anwenden können.
    Gib Deiner Klasse Auto eine Property, deren Inhalt hier "r" wäre, überlade die Property ToString der Klasse Auto und gib diese Property zurück.
    Binde die List(Of Auto) an eine Combobox oder so, da wird dann dieses "r" angezeigt und Du hast sofort die richtige Instanz und musst Dich nicht wundern, dass nix passiert, wenn Du versehentlich ein "q" eingibst.
    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!