Elegantere Lösung für mehreren Variablen

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von CiiNaxx.

    Elegantere Lösung für mehreren Variablen

    Seeeervus Com,

    ich hab gerade eine Frage und zwar schreibe ich gerade für meiner Mutter ein Programm zwegs Variabler Tastenveränderung auf den "F" Tasten.

    Nun Habe ich bisher immer den Code so geschrieben aber bei 540 Verschiedenen Variablen macht das kein Spaß :cursing:


    Spoiler anzeigen

    VB.NET-Quellcode

    1. If CheckBoxAE.Checked And CheckBoxF1.Checked Then
    2. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F1)
    3. ElseIf CheckBoxAE.Checked And CheckBoxF2.Checked Then
    4. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F2)
    5. ElseIf CheckBoxAE.Checked And CheckBoxF3.Checked Then
    6. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F3)
    7. End If




    Nun meine Frage gibt es eine Elegantere Möglichkeit sämtliche Zahlen (0 - 9) als Variablen auf den F1 - F12 Tasten zu Legen ? Also so wie oben im Code gezeigt soll es möglich sein die "0" mit sämtlichen F Tasten zu Kombinieren (einzeln) und das auch mit den ganzen anderen Zahlen. :)

    Mit den Buchstaben und Sonderzeichen würde ich es selbst hinbekommen (hoff ich jedenfalls)

    Hoffe ihr Versteht was ich meine

    Gruß

    Cii

    PS: Und immer dran Denken, ich hätt noch Blöder Fragen können ;)

    Edit: Ich bin zu Blöd dafür oder es liegt am Browser (Chrome) das der Code immer zusammen geschoben wird

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „CiiNaxx“ () aus folgendem Grund: Siehe EDIT:

    CiiNaxx schrieb:

    Edit: Ich bin zu Blöd dafür oder es liegt am Browser (Chrome) das der Code immer zusammen geschoben wird

    Bitte VB-Tag benutzen - aber richtig

    @topic: RegisterHotkey registriert einen Systemweiten Hotkey. Man kann damit keine Zahlen als Variablen auf eine FX-Taste legen.
    Ich hab das Tutorial befolgt da ich es schon in einigen anderen Themen gesehen hab, aber es hat nichts gebracht...



    Also sind Zahlen aus genommen :( Wie mach ich das denn mit den Zahlen ? Im Code ist Grad der Buchstabe "Ä" mit F1,F2 u. F3... Ich hoffe das geht wenigstens :(


    Danke

    Cii
    [Offtopic]

    Du hast den vb-bbcode vergessen.

    Quellcode

    1. [spoiler]
    2. [code=vbnet]
    3. If CheckBoxAE.Checked And CheckBoxF1.Checked Then
    4. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F1)
    5. ElseIf CheckBoxAE.Checked And CheckBoxF2.Checked Then
    6. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F2)
    7. ElseIf CheckBoxAE.Checked And CheckBoxF3.Checked Then
    8. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F3)
    9. End If

    [/spoiler][/code]
    Spoiler anzeigen

    VB.NET-Quellcode

    1. If CheckBoxAE.Checked And CheckBoxF1.Checked Then
    2. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F1)
    3. ElseIf CheckBoxAE.Checked And CheckBoxF2.Checked Then
    4. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F2)
    5. ElseIf CheckBoxAE.Checked And CheckBoxF3.Checked Then
    6. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F3)
    7. End If
    Ich zeig dir einfach mal den ganzen Code vllt. Verstehst du es dann :whistling:


    Soo... 4x Versucht den Code richtig einzufügen... und wieder klappt es nicht. -.-' So zum Veranschaulichen wie hier :


    Quellcode

    1. [expender][code=vbnet] Mein Code
    [/expander][/code]

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifier As Integer, ByVal vk As Integer) As Integer
    2. Private Const Key_NONE As Integer = &H0
    3. Private Const WM_HOTKEY As Integer = &H312
    4. Protected Overrides Sub WndProc(ByRef m As Message)
    5. If m.Msg = WM_HOTKEY Then
    6. Select Case m.WParam
    7. Case 1
    8. SendKeys.SendWait(CheckBoxAE.Text)
    9. Case 2
    10. SendKeys.SendWait(CheckBoxOE.Text)
    11. Case 3
    12. SendKeys.SendWait(CheckBoxUE.Text)
    13. Case 4
    14. SendKeys.SendWait(CheckBoxKomma.Text)
    15. Case 5
    16. SendKeys.SendWait(CheckBoxMinus.Text)
    17. Case 6
    18. SendKeys.SendWait(CheckBoxPlus.Text)
    19. Case 7
    20. SendKeys.SendWait(CheckBoxPunkt.Text)
    21. Case 8
    22. SendKeys.SendWait(CheckBoxRaute.Text)
    23. End Select
    24. End If
    25. MyBase.WndProc(m)
    26. End Sub
    27. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    28. If CheckBoxAE.Checked And CheckBoxF1.Checked Then 'Ab hier Eleganter wenn möglich
    29. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F1)
    30. CheckBoxF1.Enabled = False
    31. ElseIf CheckBoxAE.Checked And CheckBoxF2.Checked Then
    32. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F2)
    33. CheckBoxF2.Enabled = False
    34. ElseIf CheckBoxAE.Checked And CheckBoxF3.Checked Then
    35. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F3)
    36. CheckBoxF3.Enabled = False
    37. ElseIf CheckBoxAE.Checked And CheckBoxF4.Checked Then
    38. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F4)
    39. CheckBoxF4.Enabled = False
    40. ElseIf CheckBoxAE.Checked And CheckBoxF5.Checked Then
    41. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F5)
    42. CheckBoxF5.Enabled = False
    43. ElseIf CheckBoxAE.Checked And CheckBoxF6.Checked Then
    44. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F6)
    45. CheckBoxF6.Enabled = False
    46. ElseIf CheckBoxAE.Checked And CheckBoxF7.Checked Then
    47. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F7)
    48. CheckBoxF7.Enabled = False
    49. ElseIf CheckBoxAE.Checked And CheckBoxF8.Checked Then
    50. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F8)
    51. CheckBoxF8.Enabled = False
    52. ElseIf CheckBoxAE.Checked And F9.Checked Then
    53. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F9)
    54. F9.Enabled = False
    55. ElseIf CheckBoxAE.Checked And CheckBoxF10.Checked Then
    56. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F10)
    57. CheckBoxF10.Enabled = False
    58. ElseIf CheckBoxAE.Checked And CheckBoxF12.Checked Then
    59. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F12)
    60. CheckBoxF12.Enabled = False
    61. End If
    62. End Sub


    Und Erklären wie ich das mit den Zahlen hin bekomme

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „CiiNaxx“ ()

    1. Deine HotKey-Registrierung ist Müll.
    Du hast stets genau einen HotKey registriert, den mit der laufenden Nummer 1.
    Wenn Du einen zweiten registrieren willst, solltest Du den ggf. vorhandenen löschen.
    2. Du kannst nur "zulässige" Tastenkombinationen registrieen, also Alt, Shift, Ctrl, Win und eine "normale" Taste.
    Du kannst nicht die Tastenkombination "a" und "b" registrien, das geht halt nicht.
    Solche Kombinationen müsstest Du über KeyDown oder GetAsyncKeyState() abrufen, das geht aber nicht systemweit.
    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!
    Ich will keine Combos haben, sondern nur die Tasten als Variable auf den F Tasten Legen, so wie im Code dies aber nur als Elegantere Lösung :)

    VB.NET-Quellcode

    1. If CheckBoxAE.Checked And CheckBoxF1.Checked Then RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F1)



    Schwer zu Erkennen ist hier doch deutlich gemacht das ich die Taste "AE" (Ä) auf die Taste F1 Verweise, dies aber als Variable auch möglich ist, so wenn ich nun die CheckboxAE "checke" und die ComboboxF4 "checke" das die Taste F4 nun auch ein "Ä" ausgibt wenn ich diese Drücke :)

    Ist schwer zu Erklären wahrscheinlich auch noch Schwerer zu Verstehen aber es gibt doch immer eine Elegantere möglichkeit ;)
    Wie wertest Du denn die HotKeys in Deinem Programm aus?
    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!
    Ach so. Du möchtest, dass beim Drücken einer F-Taste, in wirklichkeit eine andere Taste gedrückt wird?
    Das sind mehrere Probleme, die Du getrennt behandeln solltest:

    1.
    Wie merke ich mir, dass bei der F1-Taste eigentlich die Ä-Taste gedrückt werden soll?
    Siehe dazu die Dictionary-Klasse

    2.
    Wie registriere ich einen HotKey?
    Siehe dazu das Tutorial von ErfinderDesRades.
    @RodFromGermany: Du hast geschrieben, dass er immer nur einen HotKey registriert haben soll. Warum das?
    Wäre es nicht sinnvoller für jede F-Taste einen HotKey zu registrieren (wenn die Taste verknüpft ist)?

    3.
    Wie simuliere ich einen Tastendruck für ander Programme?
    Siehe dazu SendKeys.Send()

    Wenn Du diese drei Probleme getrennt voneinander gelöst hast, dann kannst Du beginnen, sie zu verknüpfen:
    Du bekommst von 2. heraus, welche Taste gedrückt wurde, gibst das an 1. weiter, was Dir sagt, welche Taste das simulieren soll, und das wiederum gibst Du an 3. weiter.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Du hast geschrieben, dass er immer nur einen HotKey registriert haben soll. Warum das?

    VB.NET-Quellcode

    1. If CheckBoxAE.Checked And CheckBoxF1.Checked Then
    2. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F1) ' hier ist der Parameter 1
    3. ElseIf CheckBoxAE.Checked And CheckBoxF2.Checked Then
    4. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F2) ' hier ist der Parameter 1
    5. ElseIf CheckBoxAE.Checked And CheckBoxF3.Checked Then
    6. RegisterHotKey(Me.Handle, 1, Key_NONE, Keys.F3) ' hier ist der Parameter 1
    7. End If
    Die müssten sonst 1, 2, 3 sein.
    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!
    Es ist ja immer noch die Selbe Taste, nur auf einer anderen F Taste gepackt :)

    Also ich kann in deinem Codeabschnitt die Taste


    Ä mit F1
    Ä mit F2
    Ä mit F3

    Kombinieren, dies kann ich aber nur machen wenn ich die CheckboxAE und die CheckboxF1 o. F2 o. F3 anticke... Im Codeabschnitt den ich oben Gepostet hab kann ich die Taste Ä mit sämtlichen F Tasten Kombinieren :)

    Wenn die CheckboxAE angetickt ist und die CheckboxF1 auch so wird dann bei bestätigen des Buttons, die Ä Taste auf die F1 Taste "Kopiert", die dann für die ganze Sitzung, oder bis es wieder geändert wird, die Taste "Ä" Simuliert

    Kaputte Taste drücken > Keine Reaktion > Verschieben auf F Taste > Selektierte F Taste Simuliert kaputte Taste !!!11elf
    Warum registrierst du nicht einfach eine Tastenkombi mit der sie das "Ä" schreibt z.B.: Strg+Alt+A = ä bzw Strg+Alt+Shift = Ä

    Dann brauchst du das Ganze nicht auf die F-Tasten legen....
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    CiiNaxx schrieb:

    Es ist ja immer noch die Selbe Taste, nur auf einer anderen F Taste gepackt :)
    Also ich kann in deinem Codeabschnitt die Taste
    Ich denke mal, wir reden hier aneinander vorbei.
    Was Du mit Checkboxen und Ä machst, hat doch primär nichts mit Deinen HotKeys zu tun.
    HotKeys sind je nach dem die Tasten F1, F2 oder F3.

    RodFromGermany schrieb:

    Wie wertest Du denn die HotKeys in Deinem Programm aus?
    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!