none
Wie PropertyGrid verwenden, um Tastaturbelegung umzusetzen? RRS feed

  • Frage

  • Hallo liebe Community,

    für ein Tool, welches ich kostenlos zur Verfügung stellen möchte, bräuchte ich eine Möglichkeit komfortabel eine Tastaturbelegung konfigurieren zu können. Das bedeutet, dass ich eine Menge an Aktionen habe und dazu jeweils eine Taste dafür belegen möchte. Doppeltasten wie strg + f5 oder shift + s usw werden nicht benötigt. Also nur reine Tastenanschläge wie F5, S oder Mouse1.

    Ich dachte mir, ich setze es vielleicht mit einem PropertyGrid um, da ich die Aktionen dann auch schön Gruppieren kann. 

    Umsetzbar wäre es z.B. dass ich ein Enum, mit allen Tasten, die es gibt erstelle und dass man dann zu jeder Aktion aus diesem DropDown wählen kann. Schöner wäre es jedoch, wenn man auf ... klickt, es ein Dialog öffnet in den man eine bestimmte Taste drücken kann. Das schließt automatisch diesen Dialog und trägt die gedrückte Taste in das propertyGrid. Da habe ich jedoch keinerlei Ahnung, wie ich das Umsetzen könnte.

    Wenn jemand eine völlig andere Idee hat, würde ich sie auch gerne hören.

    Donnerstag, 30. August 2012 08:33

Antworten

  • Hallo,

    Ich würde es nicht unbedingt mit ein em Dialog amchen, sondern mehr so wie eine ComboBox (schlechtes Beispiel, mirt viel aber nichts besseres ein) die dann aufgeht. Gucke dir dazu mal diesen Artikel an. Ich würde eine TextBox wählen und das KeyDown-Event abfangen. Wenn der Benutzer eine Gültige Taste gedrückt hat, so kannst du das Minifenster wieder schließen und die Taste übergeben.

    Um die Eigenschaften angezeigt zu bekommen, musst du eine Klasse erstellen, welche Alle Eigenschaften für die Tasten bereit stellt. Wenn du einer Eigenschaft das Attribut

    [Browsable(false)]

    gibst, taucht es nicht im PropertyGrid auf. Weiterhin müsstest du noch prüfgen, on eine Taste schon vergeben wurde, wenn ja einen Fehler ausgeben und den Wert zurück setzen.

    Ich hoffe, ich konnte dir etwas weiter helfen.


    Koopakiller - http://koopakiller.ko.ohost.de/

    Donnerstag, 30. August 2012 09:10
    Moderator

Alle Antworten

  • Hallo,

    Ich würde es nicht unbedingt mit ein em Dialog amchen, sondern mehr so wie eine ComboBox (schlechtes Beispiel, mirt viel aber nichts besseres ein) die dann aufgeht. Gucke dir dazu mal diesen Artikel an. Ich würde eine TextBox wählen und das KeyDown-Event abfangen. Wenn der Benutzer eine Gültige Taste gedrückt hat, so kannst du das Minifenster wieder schließen und die Taste übergeben.

    Um die Eigenschaften angezeigt zu bekommen, musst du eine Klasse erstellen, welche Alle Eigenschaften für die Tasten bereit stellt. Wenn du einer Eigenschaft das Attribut

    [Browsable(false)]

    gibst, taucht es nicht im PropertyGrid auf. Weiterhin müsstest du noch prüfgen, on eine Taste schon vergeben wurde, wenn ja einen Fehler ausgeben und den Wert zurück setzen.

    Ich hoffe, ich konnte dir etwas weiter helfen.


    Koopakiller - http://koopakiller.ko.ohost.de/

    Donnerstag, 30. August 2012 09:10
    Moderator
  • Danke, werde ich heute Abend mal ausprobieren.
    Donnerstag, 30. August 2012 09:55
  • Soweit funktionierts ganz gut. Ich habe nur ein Problem, welches ich derzeit nicht umzusetzen weiß. Und zwar habe ich sämtliche mögliche Aktionen, für die es eine Taste zu belegen gibt in einer Klasse als Eigenschaft stehen. Diese Klasse übergebe ich dem PropertyGrid und er zeigt alles super an. 

    Doch hat der Benutzer die Möglichkeit neue Aktionen zu definieren, für die dann wieder eine Taste definiert werden muss. Doch kann ich die Klasse ja nicht einfach im Quellcode erweitern. Ich vermute, dass man da mit Reflection eventuell ran muss, aber habe dahin gehend keinerlei Ahnung.

    Gibt es dafür einen Workaround oder Best Practise Vorschläge?

    Montag, 17. September 2012 08:23
  • Hat niemand eine Idee?
    Donnerstag, 4. Oktober 2012 15:10
  • Hallo, ich fand eben durch zufall das hier. Dort ist ein Beispiel, wie man Dynamisch Proeprties zumk PropertyGrid hinzufügen kann.

    Alternativ kann ich dir noch folgende Seiten geben:

    http://www.codeproject.com/Articles/189521/Dynamic-Properties-for-PropertyGrid

    Ich hoffe, das hilft dir weiter.

    PS: Warum als neuer Benutzer?

    Ich gehe davon aus, das dir meine Antwort weiter geholfen hat


    Koopakiller - http://koopakiller.ko.ohost.de/



    Montag, 8. Oktober 2012 15:36
    Moderator