TopMost löst Button aus

  • VB.NET
  • .NET (FX) 4.0

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

    TopMost löst Button aus

    Hallo Zusammen,

    Ich habe mich heute hier mal angemeldet weil ich mit meinem Latein etwas am Ende bin.

    Ich habe mir in VB.net eine Anwendung geschrieben mit der ich mein Rigol Oszilloskop steuern kann.
    In den Einstellungen habe ich die Möglichkeit geschaffen das Programm per TopMost immer im Vordergrund zu halten. Hier komme ich jetzt schon zu meinem Problem.

    Innerhalb des Steuerprogramms sind 3 Buttons vorhanden die durch bloßen Focus augelöst werden können (Cursor). Der erste der drei Buttons wird ausgelöst sobald ich das TopMost aktiviere.

    hier mal die betroffenen Codeschnipsel ..

    VB.NET-Quellcode

    1. Menu_OnTop.Checked = My.Settings.onTop
    2. SyncToolStripMenuItem.Checked = My.Settings.sync
    3. Me.Location = My.Settings.Pos
    4. Notice.AcceptsTab = True
    5. TopMost = My.Settings.onTop ' Sobald Visual Studio hier fertig ist wird "A3_Click" ausgelöst
    6. auto_refresh.Enabled = True


    Hier noch der Code zu A3-A5 Click

    VB.NET-Quellcode

    1. Private Sub A3_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles A3.Click, A3.Enter '30hz
    2. Dim b As Button = eventSender
    3. AutoTime.Checked = False
    4. SendData(":TIMebase:SCALe 1E-02;:timebase:offset 0")
    5. End Sub
    6. Private Sub A4_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles A4.Click, A4.Enter '1khz
    7. AutoTime.Checked = False
    8. SendData(":TIMebase:SCALe 1E-04;:timebase:offset 0")
    9. End Sub
    10. Private Sub A5_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles A5.Click, A5.Enter '30kHz
    11. AutoTime.Checked = False
    12. SendData(":TIMebase:SCALe 1E-05;:timebase:offset 0")
    13. End Sub


    die Konfiguration des A3-A5 Buttons sieht so aus :

    VB.NET-Quellcode

    1. '
    2. 'A3
    3. '
    4. Me.A3.BackColor = System.Drawing.SystemColors.Control
    5. Me.A3.Cursor = System.Windows.Forms.Cursors.Default
    6. Me.A3.ForeColor = System.Drawing.SystemColors.ControlText
    7. Me.A3.Location = New System.Drawing.Point(25, 17)
    8. Me.A3.Name = "A3"
    9. Me.A3.RightToLeft = System.Windows.Forms.RightToLeft.No
    10. Me.A3.Size = New System.Drawing.Size(55, 25)
    11. Me.A3.TabIndex = 301
    12. Me.A3.Text = "30Hz"
    13. Me.A3.UseVisualStyleBackColor = False
    14. '
    15. 'A4
    16. '
    17. Me.A4.BackColor = System.Drawing.SystemColors.Control
    18. Me.A4.Cursor = System.Windows.Forms.Cursors.Default
    19. Me.A4.ForeColor = System.Drawing.SystemColors.ControlText
    20. Me.A4.Location = New System.Drawing.Point(85, 17)
    21. Me.A4.Name = "A4"
    22. Me.A4.RightToLeft = System.Windows.Forms.RightToLeft.No
    23. Me.A4.Size = New System.Drawing.Size(55, 25)
    24. Me.A4.TabIndex = 302
    25. Me.A4.Text = "1 kHz"
    26. Me.A4.UseVisualStyleBackColor = False
    27. '
    28. 'A5
    29. '
    30. Me.A5.BackColor = System.Drawing.SystemColors.Control
    31. Me.A5.Cursor = System.Windows.Forms.Cursors.Default
    32. Me.A5.ForeColor = System.Drawing.SystemColors.ControlText
    33. Me.A5.Location = New System.Drawing.Point(145, 17)
    34. Me.A5.Name = "A5"
    35. Me.A5.RightToLeft = System.Windows.Forms.RightToLeft.No
    36. Me.A5.Size = New System.Drawing.Size(55, 25)
    37. Me.A5.TabIndex = 303
    38. Me.A5.Text = "40 kHz"
    39. Me.A5.UseVisualStyleBackColor = False


    Kann mir von euch einer erzählen warum nur A3 ausgelöst wird sobald TopMost aktiviert wird ??!
    Oder hat jemand ne Idee wie ich es umgehen kann das es beim Start aktiviert wird ?

    Ich bin da aktuell echt ratlos.

    Danke schonmal vorweg ..

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

    Willkommen im Forum.
    Wenn Du Dein Form per TopMost vorholst, wird entweder das erste selektierbare oder das zuletzt selektierte CE den Focus erhalten und somit sein GotFocus-Event feuern. Wird wohl in Deinem Fall A3 sein. Es kann nur eines geben, welches den Eingabefokus hat.

    Umgehung für den Start: Nimm ein anderes selektierbares CE, und lege z.B. per Aktivierreihenfolge oder per Selbereditieren der TabIndices fest, dass jenes neue CE den kleinsten/ersten TabIndex bekommt.

    btw: Bitte passende CodeTags verwenden.
    und: Etwas komische Namensgebung für Buttons: A3, A4, A5. Zumindest für mich.

    @mrMo: Jup, fiel mir auch ein, aber Du warst schneller: Das Programm lässt sich mit so ner Einstellung wahrscheinlich etwas unintuitiv bedienen. Zumindest für einen Normal-User.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Mach halt das Enter Event weg. Macht bei nem Button doch eh wenig Sinn, oder? Ein Button ist ja da um geklickt werden...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hallo VaporiZed,

    Danke erstmal für die schnelle Antwort. Ich hatte sowas schon fast vermutet. In der Folge heißt das für mich ich sollte vor dem TopMost einfach den Focus auf ein "Startbutton" setzen oder ein Dropdown Menü.

    Zu deinen Randbemerkungen..
    Was bringen mir die "CodeTags" ? abgesehn von besserer Lesbarkeit für irgendwann, falls ich das Programm Jahre später wieder ausbuddeln sollte.

    Ja die Namensgebung ist etwas unglücklich.. Dieses Programm ist mein erstes und einzigstes in VB.net .. alle die danach kamen waren bereits in C# geschrieben und hatten auch sinnvollere Bezeichner ;). Das nachträglich zu ändern, dazu fehlt mir einfach die Muse ;) .

    Zerstreuter schrieb:

    Was bringen mir die "CodeTags" ? abgesehn von besserer Lesbarkeit für irgendwann, falls ich das Programm Jahre später wieder ausbuddeln sollte.
    Na nee. Uns bringt das was. ;) Es geht darum, dass die foreninternen CodeTags hier im Forum benutzt werden, damit wir Deinen Code besser lesen können, wegen Syntax-Highlighting. Das hat nix mit Deinem Code bei Dir zu tun. Bessere Hilfe ist dann möglich, da wir dann besser durchblicken.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Zerstreuter schrieb:

    In der Folge heißt das für mich ich sollte vor dem TopMost einfach den Focus auf ein "Startbutton" setzen oder ein Dropdown Menü.

    Warum nutzt du bei einem Button das Enter Event? Ein Button ist doch eher zum klicken da, oder nicht?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @VaporiZed achso .. ich hatte eben nicht gesehn das es extra tags für vb.net gibt . habs grad geändert..

    @mrMo weil ich dann schnell mit den cursor zwischen den 3 frequenzen hin und her switchen kann ohne die Maus benutzen zu müssen .. das Cursorkreuz ist in diesem Fall ergonomischer .. is halt für mich .. und sonst keinen andren :D.. Mich nervte es das ich immer nach dem wechsel auf einen der andren buttons erst enter drucken mußte damit was passierte .. so wars einfacher

    danke nochmal
    @Zerstreuter Ebenfalls Willkommen im Forum. :thumbup:
    Und:
    Gib Deinem Projekt Option Strict On.
    Visual Studio - Empfohlene Einstellungen
    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!