2011-06-03 19 views
7

(स्पिन बॉक्स को हटाने) googling के एक टन के बाद, मैं कुछ भी साथ नहीं आ सकता है ..सी # WinForms NumericUpDown नियंत्रण

वहाँ किसी भी तरह से एक NumericUpDown नियंत्रण कि स्पिन बॉक्स नहीं है पाने के लिए है?

मुझे एक टेक्स्टबॉक्स चाहिए जो केवल पूर्णांक स्वीकार करता है, और एक न्यूमेरिकअपडाउन में एकदम सही व्यवहार है जिसे मैं ढूंढ रहा हूं। हालांकि, मुझे अंतरिक्ष की बाधाओं के लिए संख्यात्मक स्पिनबॉक्स को छिपाने की आवश्यकता है।

जब मैं numericUpDown.Controls [0] जैसे कुछ करने की कोशिश करता हूं। हाइड() या न्यूमेरिकअपडाउन.कंट्रोल। रीमूवएट (0), स्पिनबॉक्स गायब हो जाता है लेकिन स्पिनबॉक्स एक असामान्य शून्य छोड़ देता है जहां स्पिनबॉक्स होता था। इस प्रकार संख्या उस बिंदु पर स्क्रॉल करती है, जिसका अर्थ है कि स्थान बर्बाद हो गया है ..

क्या इसका कोई अन्य समाधान है?

धन्यवाद ..

उत्तर

10

आप न्यूमेरिकअपडाउन से प्राप्त कर सकते हैं। जब नियंत्रण बनाया जाता है तो चाल नियंत्रण को छिपाना है।

public class NumericUpDownWitoutButtons : NumericUpDown 
{ 
    public NumericUpDownWitoutButtons() 
    { 
     Controls[0].Visible = false; 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     e.Graphics.Clear(SystemColors.Window); 
     base.OnPaint(e); 
    } 
} 

यदि स्थान बटन अजीब लगते हैं, तो ऑनपेंट को ओवरराइड भी करें।

इसके अलावा, आपको शायद न्यूमेरिक अपडाउन की आवश्यकता नहीं है। क्या यह सत्यापित करने के लिए पर्याप्त होगा कि केवल अंक ही टाइप कर सकते हैं? C# Numbers Only Textbox

+0

मैंने अभी यह कोशिश की है, क्षमा करें, यह काम नहीं करता है .. टेक्स्ट बॉक्स के दाहिने तरफ एक ऐसी जगह है जो अनुपयोगी है .. टेक्स्ट उस स्क्रॉलिंग शुरू होता है जब यह सफेद स्थान पर जाता है जहां उप डाउन बटन होते थे :( – krebstar

+0

@krebstar - उत्तर –

+0

हाय अपडेट किया गया, मदद के लिए धन्यवाद .. लेकिन यह अभी भी मेरी समस्या का समाधान नहीं करता है .. यहां एक तस्वीर है जो आपको दिखाने के लिए है कि मैं किस बारे में बात कर रहा हूं: http://imgur.com/EP1OD – krebstar

0

मैं को तीर बटन को अक्षम करने के लिए बस गया, जैसा कि उन्हें छिपाने या हटाने की कोशिश करने से कम बदसूरत है।

इसके तुरंत बॉयलरप्लेट कोड के बाद:

internal MainWin() 
{ 
    InitializeComponent(); 

, इस जोड़ें:

myNumericUpDown.Controls[0].Enabled = false; // Disable the arrow buttons. 

इसके अलावा: incrementing से (कीबोर्ड पर) तीर कुंजी को रोकने के लिए नियंत्रण के गुणों में false को InterceptArrowKeys निर्धारित करते हैं, और myNumericUpDown.Value में कमी।

बुरा तरीके:

myNumericUpDown.Controls[0].Hide(); // Hide the arrow buttons. 
    // This leaves a gray patch that turns white after minimize-and-restore. 

myNumericUpDown.Controls.RemoveAt(0); // Remove the arrow buttons. 
    // This leaves a gray patch that turns white after minimize-and-restore. 

आधा बुरा रास्ता:

ऊपर भूल जाओ। नियंत्रण के गुणों में केवल Increment से 0 पर सेट करें। तीर बटन अभी भी काम करते हैं, और तीर कुंजी (कीबोर्ड पर) अभी भी अवरुद्ध हैं, लेकिन अब वे कुछ भी नहीं करते हैं। अफसोस की बात है, अक्षम तीर बटन की तुलना में नो-एक्शन बटन शायद कम सहज नहीं हैं। (मुझे आश्चर्य है कि यह भी स्वीकार करता है Increment = 0 हूँ इस पर नियंत्रण का एक स्मार्ट संस्करण बड़े करीने से तीर बटन को छिपाने होगा जब वेतन वृद्धि 0. है।)

अन्य समाधान (ओं):

एक number- बॉक्स को TextBox के रूप में लागू किया जा सकता है जो अतिरिक्त कोड के साथ इनपुट को प्रतिबंधित करता है, और एक संख्यात्मक मान (decimal या अपनी पसंद) को देता है या देता है।(खोज कई विविध, जटिल उदाहरण पाता है।) चिपका हुआ डेटा कीस्ट्रोक से अलग-अलग आता है, इसलिए पेस्ट को संभालने के लिए अतिरिक्त कोड की आवश्यकता होती है। (ऊपर: आप बिल्ट-इन NumericUpDown की तुलना में नंबर-बॉक्स को स्मार्ट बना सकते हैं: न्यूमेरिक अपडाउन बेवकूफ रूप से स्वीकार करता है और . प्रदर्शित करता है जब तक कि उपयोगकर्ता DecimalPlaces = 0 निर्दिष्ट नहीं करता है, और यह कई दशमलव बिंदुओं को स्वीकार करता है और प्रदर्शित करता है,

एक पूर्णांक बॉक्स एक सामान्यीकृत संख्या बॉक्स कि वास्तविक संख्या() स्वीकार करता है वैकल्पिक रूप से फ्लोटिंग प्वाइंट अंकन में और एक वास्तविक संख्या का प्रकार (float, double, या decimal) रिटर्न की तुलना में आसान है बकवास है।)।

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