Öffnen einer Form schlägt fehl

  • VB.NET

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

    Öffnen einer Form schlägt fehl

    hallo zusammen,

    heute plötzlich habe ich ein Problem bekommen. ich habe eine if Überprüfung, wenn diese zutrifft sollte folgendes ausgeführt werden:

    Quellcode

    1. mainForm.show()

    wenn ich nun debugge kommt jedes mal folgende Meldung in dieser Zeile:

    "​Zusätzliche Informationen: Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.."

    dabei habe ich doch gar nichts an diesem Teil des Codes gemacht... :thumbdown:
    habe dann versucht die mainForm als Startup-Form zu nehmen, genau der gleiche Fehler...

    jemand eine Idee woran das liegen könnte?
    Ja, etwas mehr Code wäre angemessen.
    Wenn das nicht die Instanz ist, sondern der Weg des direkten Anzeigens via Form.Show(), dann ist das sowieso Müll.

    So geht's:

    VB.NET-Quellcode

    1. Dim mainForm As New MainForm()
    2. mainForm.Show()
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @BradApfel Nö, nicht unbedingt. Norm ist das nicht wirklich, ich nehme auch immer ​MainForm usw, also das passt schon.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    Ja, etwas mehr Code wäre angemessen.
    Wenn das nicht die Instanz ist, sondern der Weg des direkten Anzeigens via Form.Show(), dann ist das sowieso Müll.

    So geht's:

    VB.NET-Quellcode

    1. Dim mainForm As New MainForm()
    2. mainForm.Show()


    danke, ohne gross zu probierne denke ich, dass das die Lösung ist...

    BradApfel schrieb:

    die Norm ist übrigens frmMain()

    Gruß


    ich weiss, dass ich mehr mit Abkürungen wie lbl, frm, rtb, usw. arbeiten sollte, ist dann aber für mich persönlich noch ein Schönheitsdetail
    @Trade ich gebe nur das weiter was ich gelernt habe.

    ich weiss, dass ich mehr mit Abkürungen wie lbl, frm, rtb, usw. arbeiten sollte, ist dann aber für mich persönlich noch ein Schönheitsdetail​


    spätestens wenn du im Explorer arbeitest und 100 > Controls hast, wünschst du dir dieses "Schönheitsdetail" :D War nur ein Tipp ;)

    Na ja, wie gesagt, das kann man machen wie man will, solange man nicht irgendwie ​Form1 oder ​Hauptform oder sowas hernimmt. ^^
    Ich schreibe halt die Namen gerne aus.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ja, dachte einfach, weil sehr viele dazu raten kann es ja nicht schlechter sein :)

    also hat doch nicht geklappt...
    ich gebe mal ein paar mehr informationen:
    zum start wird eine userabfrage geöffnet... der user wird auf einem sql server gesucht und abgeglichen...
    dann wird ein passwort überprüft, aber in einem neuen fenster
    dann wird die mainForm geöffnet...

    und genau beim übergang von der passwortüberprüfung zur mainform passiert das problem:

    Quellcode

    1. Dim Conn As New MySqlConnection
    2. Dim Conn As New MySqlConnection
    3. Dim myAdapter As New MySqlDataAdapter
    4. Dim cmd As String = "Select * from passwords where passwords like '" & passwordstring & "'"
    5. Dim myCommand As New MySqlCommand
    6. myCommand.Connection = Conn
    7. myCommand.CommandText = cmd
    8. myAdapter.SelectCommand = myCommand
    9. Dim myData As MySqlDataReader
    10. Conn.Open()
    11. myData = myCommand.ExecuteReader()
    12. If myData.HasRows Then
    13. myData.Read()
    14. If passwordstring = myData(0) Then
    15. usercheck1.Close()
    16. mainform.Show()
    17. Me.Close()
    18. Else
    19. MessageBox.Show("password false")
    20. End If
    21. Else
    22. MessageBox.Show("Fehler")
    23. End If


    btw: wie mache ich das der code ein vb.net code ist?


    edit: jetzt ist es der modifiezierte code

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „0luca0“ ()

    nimm mal das Passwort raus !

    Edit:
    leider fehlt der Teil der "mainform"

    ich kann nur vermuten:
    Irgendwo steht bei dir

    Dim mainform as Frm_irgenwas

    aber da muss das Wort "new" hinzu, also

    Dim mainform as NEW frm_irgendwas

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

    RoulettePilot schrieb:

    nimm mal das Passwort raus !

    Edit:
    leider fehlt der Teil der "mainform"

    ich kann nur vermuten:
    Irgendwo steht bei dir

    Dim mainform as Frm_irgenwas

    aber da muss das Wort "new" hinzu, also

    Dim mainform as NEW frm_irgendwas
    nein, ich habe oben definiert

    Quellcode

    1. Dim mainform As New mainForm


    Gonger96 schrieb:

    Der Fehler steht dort doch schon. Er versucht Memberfunctions einer Klasse aufzurufen, was ja Quatsch ist. Zu deutsch: Instanziere und benutze das Objekt und nicht die Klasse.
    könntest du mir das genauer erklären? ich bin zwar kein blutiger Anfänger mehr, aber bei weitem bin ich noch nicht gut...
    Das hat dir @Trade im ersten Post gezeigt. Du rufst PasswordCheck.Show() auf, dass ist aber eine Klasse. Man auf keine Klassenmember zugreifen (es sei denn diese sind statisch). Eine Klasse dient als Bauplan, baut man damit nun ein Objekt (nennt man instanzieren), kann man dessen Methoden aufrufen und Properties angucken.

    Gonger96 schrieb:

    Das hat dir @Trade im ersten Post gezeigt. Du rufst PasswordCheck.Show() auf, dass ist aber eine Klasse. Man auf keine Klassenmember zugreifen (es sei denn diese sind statisch). Eine Klasse dient als Bauplan, baut man damit nun ein Objekt (nennt man instanzieren), kann man dessen Methoden aufrufen und Properties angucken.

    das was er gesagt hat habe ich umgesetzt, ausversehen einfach die falsche sub reinkopiert :/
    habe den eintrag jetzt nochmal editiert sieht nun so aus:

    Quellcode

    1. Dim mainform as New mainForm
    2. Dim Conn As New MySqlConnection
    3. Dim myAdapter As New MySqlDataAdapter
    4. Dim cmd As String = "Select * from passwords where passwords like '" & passwordstring & "'"
    5. Dim myCommand As New MySqlCommand
    6. myCommand.Connection = Conn
    7. myCommand.CommandText = cmd
    8. myAdapter.SelectCommand = myCommand
    9. Dim myData As MySqlDataReader
    10. Conn.Open()
    11. myData = myCommand.ExecuteReader()
    12. If myData.HasRows Then
    13. myData.Read()
    14. If passwordstring = myData(0) Then
    15. usercheck1.Close()
    16. mainform.Show()
    17. Me.Close()
    18. Else
    19. MessageBox.Show("password false")
    20. End If
    21. Else
    22. MessageBox.Show("Fehler")
    23. End If

    es funktioniert aber trotzdem noch nicht..

    0luca0 schrieb:

    nein, ich habe oben definiert

    Quellcode

    1. Dim mainform As New mainForm


    Steht dies wirklich bei dir so?
    Es ist absolut keine gute Idee, die "urklasse" und deine Variale gleich zu benenen.
    Da kommst du in Teufels küche... (und dein System wohl auch)

    also nicht BEIDES mainform nennen...

    Da kann man nur vermuten, das deine Variable "mainform" (also ich sag mal: das was vorm "=" ist) irgendwo local in irgendeiner Procedure erzeugt wird...
    und dein Aufruf ".Show" irgendwo außerhalb erfolgt.
    Deshalb nimmt er dann nicht deine Variable, sondern die Klasse. (ebend mainform... also das was nach dem "=" kommt)
    (DESHALB ! - nie gleich bennenen)
    Ich weiß nicht ob du das Beispiel kennst, aber es basiert auf dem was @Gonger96 gesagt hat:

    Man kann die Vorlage für ein Objekt erstellen (Klasse), aber diese Vorlage nur für weitere Vorlagen verwenden. Und nur die Unterschiede fließen dann in die Ableitungen ein und machen – durch weitere Eigenschaften und Methoden – aus einer abstrakten Klasse Gefäß eben die Klasse Flasche oder die Klasse Milchtüte oder die Klasse Fass. Und dann benutzen Sie diese neue Vorlage, um ein konkretes Fass ins Leben zu rufen – es zu instanziieren. Sie instanziieren dann ein Objekt aus einer Klasse.

    Somit ist leichter zu verstehen, dass du die Klasse PasswordCheck nicht aufrufen kannst, wenn sie nicht instanziiert wurde.
    Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
    ------------------------------------------------------------------------------------
    Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation
    habe den namen nun von mainform geändert.. dieser punkt klappt jetzt.. aber nun habe ich beim starten das problem, dass die start-form nicht angezeigt wird:

    Quellcode

    1. Namespace My
    2. 'HINWEIS: Diese Datei wird automatisch generiert. Ändern Sie sie nicht direkt. Zum Ändern
    3. ' oder bei in dieser Datei auftretenden Buildfehlern wechseln Sie zum Projekt-Designer.
    4. ' (Wechseln Sie dazu zu den Projekteigenschaften, oder doppelklicken Sie auf den Knoten "Mein Projekt" im
    5. ' Projektmappen-Explorer). Nehmen Sie auf der Registerkarte "Anwendung" entsprechende Änderungen vor.
    6. '
    7. Partial Friend Class MyApplication
    8. Dim user As usercheck1
    9. <Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
    10. Public Sub New()
    11. MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
    12. Me.IsSingleInstance = False
    13. Me.EnableVisualStyles = True
    14. Me.SaveMySettingsOnExit = True
    15. Me.ShutdownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterAllFormsClose
    16. End Sub
    17. <Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
    18. Protected Overrides Sub OnCreateMainForm()
    19. Me.MainForm = Global.Messenger.usercheck1
    20. End Sub
    21. End Class
    22. End Namespace


    in der zeile mit dem folgenden text: Me.MainForm = Global.Messenger.usercheck1 erscheint die folgende Fehlermeldung:
    Ein Ausnahmefehler des Typs "System.InvalidOperationException" ist in Messenger.exe aufgetreten.

    Zusätzliche Informationen: Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Das Formular hat während der Erstellung ausgehend von einer Standardinstanz auf sich selbst verwiesen. Dies führte zu einer Endlosschleife. Verweisen Sie im Konstruktor des Formulars mithilfe von "Me" auf das Formular..
    Das beudetet dass du irgendwo mithilfe des Namens auf das Formular selbst verwiesen hast. Dies must du aber mit Me machen.

    Beispiel:

    VB.NET-Quellcode

    1. Form1.BackColor 'falsch!
    2. Me.BackColor 'richtig!

    Warum es allerdings da erscheint, ist mir selber ein Rätsel. ^^
    Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
    ------------------------------------------------------------------------------------
    Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation

    Maik H. schrieb:

    Das beudetet dass du irgendwo mithilfe des Namens auf das Formular selbst verwiesen hast. Dies must du aber mit Me machen.

    Beispiel:

    VB.NET-Quellcode

    1. Form1.BackColor 'falsch!
    2. Me.BackColor 'richtig!

    Warum es allerdings da erscheint, ist mir selber ein Rätsel. ^^


    d.h. du meinst, dass ich in der klasse zur form1 irgendwo geschrieben habe:
    form1. backcolor = black
    ?

    EDIT: bin die klasse 3 mal durchgegangen und das war nicht der fall....