e.KeyCode wird nicht erkannt bzw. ist kein Member

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    e.KeyCode wird nicht erkannt bzw. ist kein Member

    Hallo Zusammen,

    ich komme gleich mal zum Problem, was für euch sicherlich ein Klacks ist. Ich bin ein blutiger Anfänger bzgl. VB, möchte mich da aber gerne reinfuchsen. :)

    So, ich habe das Form "License", welches geschlossen werden soll, wenn ich den Keyboard-Button "Esc" drücke. Mein Code, den ich dafür auf verschiedenen Seiten gefunden habe sieht so aus:

    Visual Basic-Quellcode

    1. Private Sub License_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. If e.KeyCode = Keys.Escape Then Me.Close()
    3. End Sub


    Nun bekomme ich schon vor dem Debuggen die Meldung, dass KeyCode kein Member von System.EventArgs ist.



    Wäre über eine Hilfestellung von euch sehr froh!
    Vielen Dank.

    Toorms schrieb:

    Mein Code, den ich dafür auf verschiedenen Seiten gefunden habe...
    So funktioniert Programmieren nicht.
    Du kannst nicht blindlings iwelche Zeilen aus verschiedenen Websites zusammenkopieren und hoffen, dasses einen Sinn ergibt.

    Der einzige Weg, zu programmieren ist, es zu erlernen.

    ZB die Methode, die du zeigst, behandelt das Load-Event (sieht man anne Handles-Klausel).
    Load ist ein Ereignis, was gefeuert wird, wenn das Form geladen wird.

    Du brauchst aber ein Ereignis, was gefeuert wird, wenn eine Taste gedrückt wird.
    Etwa das KeyDown-Event würde gehen.

    Damit hats aber eine bisserl spezielle Bewandniss: Das KeyDown-Event wird nur gefeuert, wenn du im FormDesigner für das Form KeyPreview=True eingestellt hast.

    So, jetzt hast du 2 schöne Aufgaben, die dich bisserl vertraut machen, wie VisualStudio tickt:
    1) Setze KeyPreview auf True
    2) behandle das KeyDown-Event

    Ach hier habich auch Filmchen gemacht, wie man Events behandeln kann: Alles über Events
    Hi @Toorms!

    Toorms schrieb:

    Keyboard-Button

    Ja klar...deswegen brauchst du ja auch das KeyDown-Event und nicht das FormLoad-Event.
    Würde ja auch keinen Sinn machen, wenn sich das Laden einer Form, was im Normalfall nur ganz selten passiert, auch um die Tastenabfrage kümmert. Deswegen gibt es auch für das Taste (nieder)drücken(KeyDown), loslassen(KeyRelease) und für das gedrückt halten(KeyPress) ein eigenes Event.
    Ergo: Geh in den Designer->Wähle die Form "License" aus->Im Eigenschaften-Fenster klickst du auf das Blitz-Symbol und suchst nach "KeyDown"->Doppelklick drauf->Code einfügen.

    Lg Radinator

    Edit: Schade zu langsam ;D
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Jupp, und dein Problem wird ordentlich in der Fehlermeldung beschrieben

    System.EventArgs beinhaltet kein KeyKode. Ist ja auch Logisch da es kein KeyEventArgs ist.

    Form.Load ist kein KeyEvent (es wird beim Load keine Taste gedrückt) daher kann der Tastendruck auch nicht ausgewertet werden.
    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."
    @ErfinderDesRades
    Ja, schande über mein Haupt! Pardon. Die anderen, von dir angsprochenen Punkte werde ich mir mal anschauen.

    @Radinator
    PERFEKT. Danke. Deinem Vorposter natürlich auch ein Dankeschön. :)

    So sieht es nun aus und funktioniert:

    Visual Basic-Quellcode

    1. Private Sub License_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    2. If e.KeyCode = Keys.Escape Then Me.Close()
    3. End Sub







    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Toorms“ ()

    Weil ich dir @Radinator ein "Hilfreich" gegeben habe, konnte ich nicht mehr antworten.

    Mehr oder weniger Randproblem. Vielleicht auch schon bekannt. Ich habe (aus Lust und Laune) mal einen Splashscreen eingefügt, welcher mit einem Timer funktioniert. Funktioniert auch soweit, musste dann ein den Projekteigenschaften das Startform auf "Splashscreen" ändern, damit dies zuerst geöffnet wird nach dem Debuggen. Funktioniert auch, ergibt nach dem der Timer abgelaufen ist ab an die Main-Form.

    Visual Basic-Quellcode

    1. Private Sub sp_timer_app_loading_Tick(sender As Object, e As EventArgs) Handles sp_timer_app_loading.Tick
    2. sp_pgbar.Increment(1)
    3. If sp_pgbar.Value = 100 Then
    4. Main.Show()
    5. Me.Hide()
    6. End If
    7. End Sub


    Wenn ich nun aber in der Main-Form bin und die Main-Form via "X" (rotes X) schließen möchte, öffnet (reopening) es sich wieder. So geht es immer so weiter. Braucht ihr da irgendwelchen Code auszug von mir?

    VB.NET-Quellcode

    1. If sp_pgbar.Value = 100 Then
    2. Main.Show()
    3. Me.Close()
    4. End If


    wäre richtiger, denn mit Hide schickst Du die Form in den Hintergrund und sie kommt wieder hervor wenn die Main geschloßen wird...
    "Hier könnte Ihre Werbung stehen..."
    Mit

    Visual Basic-Quellcode

    1. Me.Close()

    habe ich es auch schon gemacht, dann geht nachdem der Splashscreen geladen ist, das Main-Form ganz kurz auf und schließt sich direkt wieder.

    Ich meine das "Me.Hide()" ist ja auch nicht das gelbe vom Ei. Der Splashscreen soll ja an das Main-Form abgeben und danach nicht mehr im Hintergrund offen sein. :)
    Me.Close schließt die Form die es aufruft.
    Aber warum brauchst du das überhaupt?

    Ich habe gerade mal Testweise einen Splashscreen (über Hinzufügen Form - Splashscreen) hinzugefügt. Der schließt sich bei mir von ganz alleine nachdem ich ihn in den Eigenschaften als "Begrüßungsscreen" eingefügt hatte.
    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."
    hast du den Code denn im Spalsh Form oder in der Main Form?

    ich mach das immer so das ich im Splash eigentlich nichts drinn habe, sondern Timer ist in der Main Form und im Load Ereignis mach ich die Main Form unsichtbar, und starte den Timer. der Timer schließt dann den Splash Screen.

    VB.NET-Quellcode

    1. frmSplash.Show() 'der Begrüßungsbildschirm wird gezeigt
    2. Me.Opacity = 0 'die Hauptform wird unsichtbar gemacht
    3. Me.ShowInTaskbar = False
    4. 'ein timer wird gesetzt um den Begrüßungsbildschirm für 3 Sekunden anzuzeigen
    5. tmrSplash.Interval = 3000
    6. tmrSplash.Start()


    und im Timer:

    VB.NET-Quellcode

    1. frmSplash.Close()
    2. Me.Opacity = 1
    3. Me.ShowInTaskbar = True


    bin aber auch nur Anfänger, daher ist das sicherlich ein Workaround zu einer besseren Lösung...
    "Hier könnte Ihre Werbung stehen..."

    Schamash schrieb:

    Ich habe gerade mal Testweise einen Splashscreen (über Hinzufügen Form - Splashscreen) hinzugefügt. Der schließt sich bei mir von ganz alleine nachdem ich ihn in den Eigenschaften als "Begrüßungsscreen" eingefügt hatte.


    Das hatte ich bei mir auch eingestellt, aber da wurde der Splash ungefähr 2 Millisekunden angezeigt.... wo stelle ich dann die Zeit ein die er angezeigt wird?
    "Hier könnte Ihre Werbung stehen..."
    sone Schnickschnack muss man sich gut überlegen.
    Am glücklichsten sind die User, wenn ihre Anwendung schnellstmöglich startet, und sie nicht mit einem Splash gelangweilt werden.
    Also wenn man explizit einstellen muss, wie lange der Splash mindestens an sein soll, weil sonst das Prog zu schnell betriebsbereit ist, dann läuft was falsch.

    hier übrigens ein etwas anspruchsvollerer Splash: Splash-Screen mit Status-Meldungen

    MichaHo schrieb:

    wo stelle ich dann die Zeit ein die er angezeigt wird?


    Ich bin nicht sicher, ich war bisher der Meinung der Screen wird verwendet um wärenddes Lades etwas anzuzeigen. Also sobald das Load der Mainform beendet ist wird der Screen beendet. werde ich aber mal testen.
    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."
    je länger ich über den Post von EDR nachdenke, desto mehr denke ich r hat Recht.... :| denn eigentlich ärgert es mich auch immer wenn ich warten muss bis das Programm gestartet ist....

    Was anderes ist es natürlich, wenn die Hauptform wegen Einlesen von Daten, Berechnungen oder was auch immer länger brauch bis Sie angezeigt wird, dann kann es natürlich sinnvoll sein den Anwender darüber zu informieren das die Form halt was länger brauch.... wobei man das aber dann auch in der Hauptform durch eine ProgressBar abbilden könnte....
    "Hier könnte Ihre Werbung stehen..."
    Also ich habe es gerade getestet. Der von VS erstellte SplashScreen ist genau solange zu sehen bis MainForm.Load abgeschlossen ist.
    Also hat man (wenn überhaupt) nur die Zeit zusätzlich zu Warten die der SScreen selbst zum Laden benötigt.
    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."