2013-03-01 3 views
6

मुझे एक टेक्स्ट बॉक्स की आवश्यकता है जो:टेक्स्टबॉक्स कैसे बनाएं केवल अल्पविरामों के साथ अंक और प्रारूप संख्या स्वीकार करें?

(1) केवल वर्णों के रूप में अंक स्वीकार करता है।

(2) स्वचालित रूप से कॉमा के साथ संख्यात्मक मानों को प्रारूपित करता रहता है क्योंकि उपयोगकर्ता इसमें टाइप करता है।

उदाहरण के लिए,

 1 becomes  1.00 
    10 becomes  10.00 
    100 becomes  100.00 
    1000 becomes 1,000.00 
10000 becomes 10,000.00 
100000 becomes 1,00,000.00 

कि कैसे प्राप्त करने के लिए?

+0

इस '' 1,00,000.00' होना चाहिए 100,000.00' शायद? – Neolisk

उत्तर

4

एक नंबर का प्रारूपण जबकि उपयोगकर्ता सामान्य कार्यों में लिख रहा है बहुत खराब। इसके लिए आपको एक मुखौटा टेक्स्टबॉक्स का उपयोग करना चाहिए। इंटरनेट पर कोड के बहुत सारे जो दिखाता है कि कुंजीपटल फ़िल्टर कैसे करें ताकि केवल अंक दर्ज किए जा सकें। अधिकांश इसे पेस्ट कमांड का उपयोग करके तुच्छ रूप से पराजित किया जाता है।

सौहार्दपूर्ण तरीका उपयोगकर्ता को बुनियादी कौशल में सक्षम होने का इलाज करना है जैसे कि संख्या टाइप करना और धीरे-धीरे उसे याद दिलाना कि उसे गलत लगता है। इसके लिए मान्य घटना बनाई गई है। संख्या को प्रारूपित करने का एकदम सही समय भी है। अपनी परियोजना में एक नई कक्षा जोड़ें और इस कोड को पेस्ट करें:

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 

public class NumberBox : TextBox { 
    public NumberBox() { 
     Fraction = 2; 
    } 

    public ErrorProvider ErrorProvider { get; set; } 

    [DefaultValue(2)] 
    public int Fraction { get; set; } 

    public event EventHandler ValueChanged; 
    public decimal Value { 
     get { return this.value; } 
     set { 
      if (value != this.value) { 
       this.value = value; 
       this.Text = Value.ToString(string.Format("N{0}", Fraction)); 
       var handler = ValueChanged; 
       if (handler != null) ValueChanged(this, EventArgs.Empty); 
      } 
     } 
    } 

    protected override void OnValidating(CancelEventArgs e) { 
     if (this.Text.Length > 0 && !e.Cancel) { 
      decimal entry; 
      if (decimal.TryParse(this.Text, out entry)) { 
       if (ErrorProvider != null) ErrorProvider.SetError(this, ""); 
       Value = entry; 
      } 
      else { 
       if (ErrorProvider != null) ErrorProvider.SetError(this, "Please enter a valid number"); 
       this.SelectAll(); 
       e.Cancel = true; 
      } 
     } 
     base.OnValidating(e); 
    } 

    protected override void OnEnter(EventArgs e) { 
     this.SelectAll(); 
     base.OnEnter(e); 
    } 


    private decimal value; 
} 

संकलन। टूलबॉक्स के शीर्ष से अपने फॉर्म पर नया नंबरबॉक्स नियंत्रण ड्रॉप करें। फॉर्म पर एक त्रुटिप्रदाता भी छोड़ दें ताकि टाइपिंग गलतियों को मामूली तरीके से रिपोर्ट किया जा सके, नए नियंत्रण की त्रुटिप्रदाता संपत्ति सेट करें। वैकल्पिक रूप से फ्रैक्शन प्रॉपर्टी को संशोधित करें। जब मूल्य संशोधित किया गया था, तो आप यह जानने के लिए ValueChanged ईवेंट की सदस्यता ले सकते हैं।

0

एक बहुत ही सरल तरीका है: TextChanged और छोड़ें ईवेंट का उपयोग करना।

private void textBox_TextChanged(object sender, EventArgs e) 
{ 
    decimal theNumber; 
    if(!decimal.TryParse((sender as TextBox).Text, out theNumber)) 
    { 
     (sender as TextBox).Text = string.empty; 
    } 
} 

टेक्स्ट चेंज किए गए ईवेंट में संख्या को प्रारूपित करने की कोशिश न करें, यह गन्दा हो जाता है। फिर जब उपयोगकर्ता टेक्स्ट बॉक्स को छोड़ देता है तो प्रारूप बदल जाता है।

private void textBox_Leave(object sender, EventArgs e) 
{ 
    // Since you were validating the number while typing now there is no need for TryParse 
    decimal theNumber = decimal.Parse((sender as TextBox).Text); 
    (sender as TextBox).Text = string.Format("{0:N2}", theNumber); 
} 

नोट: यदि आप हंस जवाब का उल्लेख अधिक सविस्तार कुछ चाहिए (सर्वोत्तम प्रथाओं और वह सब सामान ...) यह, सादा और सरल है।

0

मैं जानता हूँ कि अगर यह मदद करने वाला है नहीं है, लेकिन यहाँ यह जाता है:

try 
{ 
    double number = Convert.toDouble(textBox.Text); 
    string[] digits = Regex.Split(textBox.Text, @"\W+"); 
    int x = 0; 
    List<string> finalNumber = new List<string>(); 
    while(x < numbers.Length) 
    { 
     if(digits[x] == ".") 
      break; 
     if(x%3 = 0 && x != 0) 
     { 
      finalNumber.Add(","); 
     } 
     finalNumber.Add(digits[x]); 
     x++; 
    } 
    string finalNumberJoined = ""; 
    foreach(var digit in finalNumber) 
    { 
     finalNumberJoined = finalNumberJoined + digit; 
    } 
} 
catch 
{ 
    //not a number 
} 
संबंधित मुद्दे