SORU
29 EKİM 2009, PERŞEMBE


Nasıl programlı olarak C tuş olayları oluşturabilir#?

Nasıl programlı bir anahtar taklit edecek bir olay yaratmak klavyede basılan miyim?

CEVAP
29 EKİM 2009, PERŞEMBE


Soru WPF etiketlenir ama cevapları şimdiye kadar belirli Win ve win 32.

WPF bunu yapmak için, sadece hedef KeyEventArgs ve çağrı RaiseEvent oluşturmak. Örneğin, bir Ekle göndermek için şu anda odaklı öğesi için Kapatıyorsa olay anahtar:

  var key = Key.Insert;                    // Key to send
  var target = Keyboard.FocusedElement;    // Target element
  var routedEvent = Keyboard.KeyDownEvent; // Event to send

  target.RaiseEvent(
    new KeyEventArgs(
      Keyboard.PrimaryDevice,
      PresentationSource.FromVisual(target),
      0,
      key)
    { RoutedEvent=routedEvent }
  );

Bu çözüm Yerel Aramalar veya Windows iç dayanmaz ve diğerlerine göre çok daha güvenilir olmalıdır. Ayrıca, belirli bir öğe üzerinde bir tuşa basarak canlandırmanızı sağlar.

Bu kod PreviewKeyDown Kapatıyorsa, PreviewKeyUp ve KeyUp olayları için yalnızca geçerli olduğunu unutmayın. Eğer Button olayları göndermek istiyorsanız bunu yapacaksın yani:

  var text = "Hello";
  var target = Keyboard.FocusedElement;
  var routedEvent = TextCompositionManager.TextInputEvent;

  target.RaiseEvent(
    new TextCompositionEventArgs(
      InputManager.Current.PrimaryKeyboardDevice,
      new TextComposition(InputManager.Current, target, text))
    { RoutedEvent = routedEvent }
  );

Ayrıca unutmayın:

  • Kontrolleri Önizleme almak için bekliyoruz olaylar, örneğin PreviewKeyDown Kapatıyorsa getirmeniz

  • Hedef kullanma.(...) RaiseEvent olay hedefe doğrudan gönderir meta-veri işleme gibi olmadan Hızlandırıcılar, metin oluşturma ve IME. İstediğin bu normal. Eğer gerçekten varsa, diğer taraftan, ne için gerçek bir klavye taklit anahtarları nedense kullanırsınız İnputManager.() Processınput yerine.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GOTO Conferences

    GOTO Confere

    3 EKİM 2011
  • snookie77

    snookie77

    2 Mart 2006
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010