2010-08-04 12 views
13

मैं एक WPF टेक्स्टबॉक्स में उपयोगकर्ता इनपुट अनुकरण करना चाहता हूं। मैं एक चरित्र इनपुट करना चाहता हूं जैसे OnPreviewTextInput ईवेंट ट्रिगर किया गया है। मैं पाठ संपत्ति के माध्यम से पाठ की स्थापना की कोशिश की है, लेकिन इस घटना को ट्रिगर नहीं किया:मैं एक WPF टेक्स्टबॉक्स में टेक्स्ट इनपुट अनुकरण कैसे करूं?

public void SomeFunction() 
{ 
    var textBox = new TextBox(); 
    textBox.Text = "A";      
} 

मैं घटना स्पष्ट रूप से किसी भी तरह को गति प्रदान कर सकते हैं?

उत्तर

21

इनपुट घटनाओं को अनुकरण करने के तरीके के बारे में अच्छी जानकारी के लिए How can I programmatically generate keypress events in C#? का उत्तर देखें।

तुम भी कर सकता है:

TextCompositionManager.StartComposition(
    new TextComposition(InputManager.Current, textBox, "A")); 

यह PreviewTextInput घटना बढ़ा और फिर TextInput घटना उठाते हैं और पाठ बदल जाएगा।

+0

Thanx! मुझे जिस चीज की जरूरत थी! – stiank81

+0

बैकस्पेस के बारे में क्या? – Jordan

+5

@ जोर्डन: आपको बस एक नए प्रश्न के रूप में पूछना चाहिए। हो सकता है कि आप कुछ संपादन की तलाश कर रहे हों जैसे 'EditingCommands.Backspace.Execute (शून्य, टेक्स्टबॉक्स);', लेकिन अधिक विस्तार के बिना कहना मुश्किल है। – Quartermeister

4

यह करने के लिए WinAPI का उपयोग करके किया जाएगा एक और तरीका है, SendMessage विशिष्ट होना:

[DllImport("user32.dll")] 
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); 

तो यह इस तरह से कहते हैं, जब फ़ोकस पाठ बॉक्स पर है:

SendMessage(new WindowInteropHelper(this).Handle, 0x0102, 72, 0) 

0x0102 है WM_CHAR और 72 के लिए निरंतर मान H के लिए कुंजीकोड है (आप इसके अनुसार इसे बदल सकते हैं)।

+1

साझा करने के लिए धन्यवाद, लेकिन मुझे क्वार्टरमेस्टर समाधान क्लीनर और सरल लगता है। – stiank81

+0

एक से अधिक संभावित समाधान जानना हमेशा अच्छा होता है। –

+0

हाँ, ज़रूर! यही कारण है कि मैंने आपको +1 दिया :-) – stiank81

संबंधित मुद्दे