Der verweis auf einen nicht freigegebenen Member erfordert einen Objekthinweis

  • VB.NET

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

    Der verweis auf einen nicht freigegebenen Member erfordert einen Objekthinweis

    Hallo Leute :(

    mir wird immer und immer wieder dieser Fehler ausgespuckt :/

    Der verweis auf einen nicht freigegebenen Member erfordert einen Objekthinweis


    Hier mein Code

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Text.RegularExpressions
    3. Public Class frm_main
    4. 'Hier wird das Textfile vom Addon geöffnet
    5. Private Sub cmd_read_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_read.Click
    6. Dim ofd As New OpenFileDialog
    7. ofd.InitialDirectory = "C:\"
    8. ofd.Filter = "Alle Dateien (*.*)|*.*"
    9. ofd.Title = "Wählen Sie eine Datei zum Öffnen aus"
    10. If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
    11. MsgBox("Es wird geöffnet: " & ofd.FileName)
    12. Else
    13. MsgBox("Abbruch")
    14. Me.Close()
    15. Return
    16. End If
    17. Dim charrace() As String
    18. Dim Zaehler As Integer = 0
    19. Dim fs As New FileStream("charackter.txt", FileMode.Create)
    20. Dim sw As New StreamWriter(fs)
    21. Dim myFile As String
    22. Dim myMatch As String = System.Text.RegularExpressions.Regex.Match("\[Race\]\s=\s\""]a-zA-Z0-9]""").ToString
    23. charrace = System.IO.File.ReadAllLines(myFile)
    24. While Zaehler <= charrace.Length - 1
    25. If myMatch <> "" Then
    26. txtbx_race.Text = String.Copy("""")
    27. MsgBox("Gefunden!")
    28. sw.Close()
    29. Return
    30. End If
    31. Zaehler += 1
    32. End While
    33. End Sub
    34. Private Sub cmd_close_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_close.Click
    35. Me.Close()
    36. End Sub
    37. End Class



    Hoffe ihr könnt mir da helfen :(

    das ganze passiert in Zeile 28....
    Die Methode Match ist nicht statisch (Shared), daher benötigt sie einen Objektverweis. Entweder erstellst du also ein Regex-Objekt oder nimmst die Methode Matches(String, String).

    Viele Grüße, Phil.

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

    Raiid schrieb:

    versteh das alles noch net so ganz :/

    hab mir das alles jetzt über mehrere tage zusammengearbeitet...

    könntest du mir das evtl zeigen?


    Puuhhh ... das sind Basics und nicht mit zwei Sätzen erklärt. ^^

    Versuche es mal kurz zu machen:

    Eine Klasse ist ein Code-Bereichund enthält Methoden (Function/Sub), Eigenschaften (Propertys) und Fields/Member.

    Eine Klasse selber funktioniert nicht ohne zuvor von ihr eine Instanz zu erstellen, sprich der Klasse Leben einzuhauchen. Da VB.NET extrem OOP orientiert ist werden Klassen auch Objekte genannt.

    Die Ausnahme von der obigen Regel sind Klassen-Methoden oder Eigenschaften die mit dem Modifikator Shared deklariert sind.

    Eine neue Instanz einer Klasse erzeugt man so:

    Dim myClass As New [AppName.Namespace.]MeineKlasse

    Danach kannst Du dann z.B. die Methode MeinTest aus der Klasse so nutzen:

    myClass.MeinTest()

    Die Methode könnte innerhalb der Klasse so deklariert sein:

    Public Sub MeinTest()

    '// hier steht unglaublich genialer Code

    End Sub

    Dieses Prinzip hast Du hier angewendet:

    VB.NET-Quellcode

    1. Dim ofd As New OpenFileDialog
    2. ofd.InitialDirectory = "C:\"
    3. ofd.Filter = "Alle Dateien (*.*)|*.*"
    4. ofd.Title = "Wählen Sie eine Datei zum Öffnen aus"


    ofd als neue Instanz der Klasse OpenFileDialog deklariert und danach dann über diese so bestückte Variable odf die Eigenschaften InitialDirectory, Filter und Title befüllt. Danach dann mit ofd.ShowDialog() die Methode ShowDialog aufgerufen. ;)

    Wäre die Methode MeinTest aber zusätzlich mit dem Modifikator Shared deklariert dann brauchst Du nicht zuerst eine Instanz der Klasse zu erzeugen bevor Du auf die Methode zugreifen kannst, sondern kannst direkt über den vollqualifizierten Namen zugreifen. Also so:

    '// Beispiel für eine Shared Deklaration
    Public Shared Sub MeinTest()

    '// hier steht unglaublich genialer Code

    End Sub

    Aufruf: MyAppName.Namespace.KlassenName.MethodenName

    MyAppName: Namer Deiner Applikation, deines Projektes.
    Namespace: Nur nötig wenn Du Deine Klassen in speziellen Namensräumen sortiert hast
    KlassenName: Der Name der Klasse
    MethodenName: Eh klar ... Name der Methode

    Also im obigen Beispiel so:

    MyAppName.Namespac.MeineKlasse.MeinTest()

    Genau diese Aufrufart hast Du hier verwendet:

    VB.NET-Quellcode

    1. Dim myMatch As String = System.Text.RegularExpressions.Regex.Match("\[Race\]\s=\s\""]a-zA-Z0-9]""").ToString


    Die Fehler-Meldung heisst daher schlicht nichts anderes als das Du von System.Text.RegularExpressions.Regex zuerst eine neue Instanz erzeugen musst um auf die Methode Match zugreifen zu können.

    Alles klar? ^^

    Gruß

    Rainer