2011-10-27 18 views
8

पर बैकस्पेस का पता लगाना मैं चांदी के वेब ऐप पर काम कर रहा हूं। यह एक मॉड्यूल के साथ बातचीत करता है जो एसएमएस भेजता है। मैं पाठ को 160 तक सीमित करना चाहता हूं और काउंटर दिखा सकता हूं। मैं इसे इस तरह से किया था:KeyDown

public partial class SendSMSView 
{ 
    public SendSMSView() 
    { 
     InitializeComponent(); 
     ApplyTheme(); 
    } 

    protected void tbMessage_KeyDown(object sender, KeyEventArgs e) 
    { 
     count = 160 - this.tbMessage.Text.Length; 
     this.lblCount.Content = count.ToString(); 
    } 
} 

यह बैकस्पेस और हटाना को छोड़कर सभी चाबी के लिए ठीक काम करता है। बेशक यह इस तरह काम करने के लिए बनाया जाता है। मैं इस बारे में अधिक खोदा और अधिभावी keydown घटना की कोशिश की तो मैं निम्नलिखित कोड का टुकड़ा कहा:

public class CustomTextBox : TextBox 
{ 
    public CustomTextBox(): base() 
    { 
    } 

    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     e.handler=false; 
     base.OnKeyDown(e); 
     //this place 
    } 
} 

OnKeyDown समारोह में मैं सभी की स्ट्रोक पंजीकृत मिलता है। यहां हैंडलर को झूठी में सेट करने से मदद नहीं मिलती है और फिर भी मैं tbMessage_KeyDow को ट्रिगर करने के लिए बैकस्पेस नहीं प्राप्त कर सकता हूं।

मैं किसी भी तरह से bbMessage_KeyDow फ़ंक्शन को // इस जगह से मजबूती से बैकस्पेस के लिए कॉल करना चाहता हूं।

मैंने एमएसडीएन की खोज की, और पाया कि IsInputKey को वापस लौटने के लिए अतिरंजित किया जा सकता है ताकि किडडाउन भी इसका जवाब दे, लेकिन मेरे ढांचे में न तो IsInputKey और न ही पूर्वावलोकन है। इनपुट कुंजी के रूप में पंजीकृत बैकस्पेस कुंजी प्राप्त करने के लिए या tbMessage_KeyDow को कॉल करने के लिए कोई कामकाज है [जो बहुत क्रूर दृष्टिकोण है]? कृपया मदद करे।

+0

चूंकि आप 'this.tbMessage.Text.Length' बैकस्पेस का उपयोग कर रहे हैं और हटाएं स्ट्रिंग 'टेक्स्ट' में दिखाई देंगे। या आप कुछ और मतलब है? – Stefan

+1

आप [textchanged] का उपयोग क्यों नहीं करते हैं (http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.textchanged%28v=vs.95%29.aspx) इवेंट की बजाय keydown? प्रत्येक बार – weberik

+0

धन्यवाद बदलते समय टेक्स्टबॉक्स की सामग्री को गिनें। TextChanged थोड़ा झुकाव के बाद, काम किया। – whizzyifti

उत्तर

8

इस कोशिश ....

आप एक पाठ बॉक्स में दबाया कुंजी पर backspace कुंजी पता लगाने के लिए चाहते हैं। हम सुझाव देंगे कि आप KeyDown ईवेंट के बजाय टेक्स्टबॉक्स की कीप ईवेंट में करने का प्रयास कर सकते हैं।

<TextBox x:Name="txt" KeyDown="txt_KeyDown" Text="Hello" KeyUp="txt_KeyUp"></TextBox>  

codebehind: कुछ

private void txt_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Back) 
     { 
      MessageBox.Show(this.txt.Text); 
     } 
    } 

या आप इस तरह कर सकते हैं ... एक उपयोगकर्ता नियंत्रण बनाने के द्वारा ....

public partial class Page : UserControl { 

    private TextBox TextBox1; 

    public Page() { 
     InitializeComponent(); 
     TextBox1 = new TextBox(); 
     Width = 300; 
     Height = 100; 
     LayoutRoot.Children.Add(textbox); 
     OnTextChanged(((object)(sender)), ((TextChangedEventArgs)(e))); 
     TextBox1.TextChanged; 
     if (e.Key == Key.Back) { 
      e.Handled = true; 
     } 
     else if (e.Key == Key.Delete) { 
      e.Handled = true; 
     } 
    } 
} 
0

मैं क्या करना होगा, उदाहरण के लिए इस तरह (मेरे पास वीएस नहीं है इसलिए यह शुद्ध pseduo कोड है)

public class SendSMSViewModel : INotifyPropertyChanged 
{ 
    string _text; 

    public string Text 
    { 
     get { return _text; } 
     set { 

      // or allow it and implement IDataErrorInfo to give the user a nifty error message   
      if (value != null & value.Length > 160) 
       return; 

      _text = value; 
      OnPropertyChanged(vm => vm.Text); 
      OnPropertyChanged(vm => vm.NumberOfCharactersRemaining); 
    } 
    } 

    public string NumberOfCharactersRemaining 
    { 
     get { return Text == null ? 160 : 160 - Text.Length; } 
    } 
} 

.. और फिर अपने विचार से दो तरह से डाटाबेसिंग का उपयोग करें और अपने बाइंडिंग पर "PropertyChanged" के UpdateSourceTrigger का उपयोग करना याद रखें।

+0

धन्यवाद, व्यू मॉडेल कार्यान्वयन काम करता है, वास्तव में मैंने इसे कई बार पहले किया है। मैं View.cs में इसे बाहर करने वाले अतिरिक्त कोड से बचने की कोशिश कर रहा था – whizzyifti

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