VB10 ShortcutKeysEditor op form plaatsen

Status
Niet open voor verdere reacties.

The Mighty Atom

Terugkerende gebruiker
Lid geworden
22 mei 2008
Berichten
1.380
Is het mogelijk om de UITypeEditor ShortcutKeysEditor:
shortcutkeyseditor.jpg


...beschilbaar te maken op een form, bijvoorbeeld simpelweg zo:
shortcutkeyseditor_on_form.jpg


Ik vind het namelijk een erg handige manier om shortcut te kiezen met bijbehorende modifiers, maar aangezien het om een UITypeEditor gaat, is deze alleen beschikbaar in het Property venster in de Visual Studio IDE wanneer je de property ShortCutKeys van een ToolStripMenuItem selecteert:
shortcutkeyseditor_as_property.jpg
 
Volgens mij is het niet mogelijk om dit los in een Form te plaatsen.

Maar dit is toch eenvoudig na te maken?
 
Dat is zo, alleen zou ik niet weten hoe ik een combobox laat vullen met de geldige shortcut knoppen.

Edit: ik heb een combobox gevuld met toetsen waar de gebruiker uit kan kiezen voor een shortcut, alleen krijg ik het niet voor elkaar hoe ik kan controleren of de gekozen toets is ingedrukt. Als ik een letter tussen A en Z kies lukt het wel maar als ik een andere toets kies, bijvoorbeeld F5, de Insert, de End of één van de pijltjes toetsen, dan werkt het niet.

Daarom was het een stuk makkelijker geweest als ik die shortcutkeyseditor gewoon op mn form kan zetten want die doet al het werk op de achtergrond al. Maar nee hoor, dat mag weer niet.
 
Laatst bewerkt:
Je bedoelt als je bijvoorbeeld F5 selecteert in de ComboBox, dat het programma moet detecteren of je F5 intoetst?

In feite kan dit gewoon met het KeyPress Event,maar daar was je vast zelf ook al opgekomen...

Kun je even de situatie schetsen? Wat moet er precies gebeuren?
 
Nou, ik wil een combobox met daarin de toetsen die je kan kiezen voor de shortcutkey met daarnaast 3 checkboxen voor de modifier toetsen Shift, Ctrl en Alt. Eigenlijk gewoon exaxt hetzelfde als die ShortcutKeysEditor.

De keuzes die je maakt moeten vervolgens de toetsencombinatie zijn waar ik kan een event aan wil hangen.
 
Prima, maar volgens mij ben je vergeten te controleren of er modifier toetsen zijn ingedrukt. Als ik bijvoorbeeld de Ctrl checkbox aanvink en de letter S selecteer in de combobox, en druk vervolgen de letter S in maar niet de Ctrl toets, dan krijg ik alsnog de 'Toets ingedrukt!' messagebox.

Edit:
Het lijkt er misschien niet op dat ik jouw voorbeeld app heb gebruikt, maar ik heb voor elkaar:

2 globals, voor een gewone toets en de modifiers:
Code:
    Dim Key As Keys
    Dim Modifiers As New List(Of Keys)

Een sub dat uitgevoerd word wanneer je de modifier checkboxen aan of uitvinkt also ook wanneer je een toets selecteert in de combobox:

Code:
    Private Sub ValueChanged(sender As Object, e As EventArgs) Handles cbCtrl.CheckedChanged, cbAlt.CheckedChanged, cbShift.CheckedChanged, cbbCompileShortCutKey.SelectedIndexChanged
        Modifiers.Clear()
        Dim converter As New KeysConverter
        If cbCtrl.Checked Then Modifiers.Add(converter.ConvertFromString("Control")) Else Modifiers.Add(Keys.None)
        If cbAlt.Checked Then Modifiers.Add(converter.ConvertFromString("Alt")) Else Modifiers.Add(Keys.None)
        If cbShift.Checked Then Modifiers.Add(converter.ConvertFromString("Shift")) Else Modifiers.Add(Keys.None)
        If cbbCompileShortCutKey.SelectedItem <> Nothing Then Key = converter.ConvertFromString(cbbCompileShortCutKey.SelectedItem)
    End Sub

De Key_Down sub waar de controle plaatsvind:
Code:
    Private Sub keyboardHook_KeyDown(sender As Object, e As KeyEventArgs)
        Select Case e.KeyData
            Case Modifiers(0) Or Modifiers(1) Or Modifiers(2) Or Key
                'KEY COMBO PASSED!
        End Select
    End Sub

Ik gebruik een keyboardhook zodat ik ook buiten het programma de shortcutkeys kan gebruiken.
Als ik verder geen problemen ondervind, denk ik dat dit nu opgelost is, ik geef het effe een paar dagen voordat ik de status op opgelost zet. :)

Zowiezo dank je, JoZ, voor de hulp. :)
 
Laatst bewerkt:
Ik merk inderdaad dat de modifiers niet goed worden gecontroleerd.
Nieuwe klasse gemaakt:
[CPP]Public Structure keyDat
Public Shared Control As Boolean = False
Public Shared Shift As Boolean = False
Public Shared Alt As Boolean = False
Public Shared KeyCode As Keys = Keys.None
End Structure[/CPP]

En het probleem is opgelost.

Download

En inderdaad handig van die keyboardhook, maar die heb ik hier niet ingebouwd ('t ging me even om die modifiers) ;)
 
Goedzo!
Als er nog vragen zijn, hoor ik het wel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan