C# 带小数的屏蔽文本框

C# 带小数的屏蔽文本框,c#,winforms,textbox,decimal,maskedtextbox,C#,Winforms,Textbox,Decimal,Maskedtextbox,在我的窗口应用程序中,我需要接受真实数字的屏蔽文本框 例如 1) 1.56 2) 22.34 3) 123.34 4) 12312.34 此all值应有效 有人能告诉我怎么做吗? 是的,如果有人有更好的办法来解决真正的十进制数,而不是这个蒙面的文本框 比我更喜欢看它。 谢谢…而不是使用MaskDeTabox框,而是考虑使用 NoigiUpDub>代码>。它支持System.Decimal数字,它支持您应该关心的大多数实数集数字 NumericUpDown.DecimalPlaces属性最多支持9

在我的窗口应用程序中,我需要接受真实数字的屏蔽文本框

例如
1) 1.56
2) 22.34
3) 123.34
4) 12312.34
此all值应有效

有人能告诉我怎么做吗?
是的,如果有人有更好的办法来解决真正的十进制数,而不是这个蒙面的文本框 比我更喜欢看它。

谢谢…

而不是使用MaskDeTabox框,而是考虑使用<代码> NoigiUpDub>代码>。它支持
System.Decimal
数字,它支持您应该关心的大多数实数集数字


NumericUpDown.DecimalPlaces
属性最多支持99位小数。

使用类似这样的自定义控件(修改它以满足您的需要):

使用系统;
使用系统组件模型;
使用系统文本;
使用System.Windows.Forms;
使用系统图;
命名空间自定义控件
{ 
公共枚举原因
{ 
未知=0,
野田,
残疾人士,
认可的
} 
公共类文本框:文本框
{ 
公共常量int WM_PASTE=0x0302;
公共事件事件处理程序被拒绝;
公共事件事件处理程序被拒绝;
private bool_DecimalSeparator=false;
私人国际单位精度;
公共新水平对齐文本对齐
{ 
获取{return base.TextAlign;}
设置{base.TextAlign=value;}
} 
公共整数精度
{ 
获取{return\u Precision;}
设置{u Precision=value;}
} 
公共分词框()
{ 
text对齐=水平对齐。右;
精度=3;
} 
受保护的覆盖无效OnGotFocus(事件参数e)
{ 
选择全部();
基地,昂戈特福克斯(e);;
} 
受保护的覆盖无效OnKeyDown(KeyEventArgs e)
{ 
bool-validate=true;
if(Text.Contains(“.”)| Text.Contains(“,”)
{ 
int-indexep;
字符串[]拆分;
字符串partiDecimal=“”;
if(Text.Contains(“.”)
indexSep=Text.IndexOf('.');
其他的
indexSep=Text.IndexOf(',');
split=Text.split(新字符[]{',','..});
partiDecimal+=拆分[1];
if(partiDecimal.Length>=精度)
如果(选择Start>Text.Length-(partiDecimal.Length+1))
验证=假;
} 
布尔结果=真;
bool validateKeys=(e.KeyCode==Keys.Enter);
布尔数字键=(
((e.KeyCode>=Keys.D0&&e.KeyCode=Keys.NumPad0&&e.KeyCode 1)
无效=真;
如果(无效)
{ 
Text=“”;
返回;
} 
if(Text.Contains(“.”)| Text.Contains(“,”)
{ 
字符串charSep=“”;
字符串[]拆分;
字符串partiEntier=“”;
if(Text.Contains(“.”)
charSep=“.”;
其他的
charSep=“,”;
split=Text.split(新字符[]{',','..});
partiEntier+=split[0];
如果(partiEntier==“”)
Text=“0”+charSep+split[1];
} 
base.OnTextChanged(e);
} 
受保护的覆盖无效WndProc(参考消息m)
{ 
如果(m.Msg==WM_粘贴)
{ 
PasteEventArgs e=CheckPasteValid();
如果(例如RejectReason!=粘贴RejectReasons.Accepted)
{ 
m、 结果=IntPtr.0;
不合格品(e);
返回;
} 
} 
基准WndProc(参考m);
} 
私有PasteEventArgs CheckPasteValid()
{ 
PasteRejectRejectReasures=PasteRejectReasures.Accepted;
字符串originalText=文本;
string clipboardText=string.Empty;
string textResult=string.Empty;
尝试
{ 
clipboardText=Clipboard.GetText(TextDataFormat.Text);
如果(clipboardText.Length>0)
{ 
text结果=(
Text.Remove(SelectionStart,SelectionLength)。Insert(SelectionStart,clipboardText));
foreach(剪贴簿文本中的字符c)
{ 
如果(!char.IsDigit(c))
{ 
rejectReason=粘贴RejectReasures.InvalidCharacter;
打破
} 
} 
} 
其他的
rejectReason=PasteRejectReasons.NoData;
} 
抓住
{ 
rejectReason=粘贴拒绝原因。未知;
} 
返回新的PasteEventArgs(originalText、clipboardText、textResult、rejectReason);
} 
受保护的虚拟无效OnKeyRejected(KeyRejectedEventArgs e)
{ 
EventHandler=KeyRejected;
if(处理程序!=null)
处理者(本,e);
} 
受保护的虚拟无效OnPasteRejected(PasteEventArgs e)
{ 
EventHandler=PasteRejected;
if(处理程序!=null)
处理者(本,e);
} 
} 
}

您所有的示例都有两位小数。是否希望接受更多的数字?如何将NumericUpDown的最大值从100增加到100?单击向上/向下控件,按F4调出其属性,并将最大属性从100增加到100+
using System; 
using System.ComponentModel; 
using System.Text; 
using System.Windows.Forms; 
using System.Drawing; 

namespace CustomControls 
{ 
    public enum PasteRejectReasons 
    { 
        Unknown = 0, 
        NoData, 
        InvalidCharacter, 
        Accepted 
    } 

    public class DecimalTextBox : TextBox 
    { 
        public const int WM_PASTE = 0x0302; 
        public event EventHandler<KeyRejectedEventArgs> KeyRejected; 
        public event EventHandler<PasteEventArgs> PasteRejected; 

        private bool _DecimalSeparator = false; 
        private int _Precision; 

        public new HorizontalAlignment TextAlign 
        { 
            get { return base.TextAlign; } 
            set { base.TextAlign = value; } 
        } 

        public int Precision 
        { 
            get { return _Precision; } 
            set { _Precision = value; } 
        } 

        public DecimalTextBox() 
        { 
            TextAlign = HorizontalAlignment.Right; 
            Precision = 3; 
        } 

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

        protected override void OnKeyDown(KeyEventArgs e) 
        { 
            bool validate = true; 

            if (Text.Contains(".") || Text.Contains(",")) 
            { 
                int indexSep; 
                string[] split; 
                string partiDecimal = ""; 

                if (Text.Contains(".")) 
                    indexSep = Text.IndexOf('.'); 
                else 
                    indexSep = Text.IndexOf(','); 

                split = Text.Split(new char[] { ',', '.' }); 
                partiDecimal += split[1]; 

                if (partiDecimal.Length >= Precision) 
                    if (SelectionStart > Text.Length - (partiDecimal.Length + 1)) 
                        validate = false; 
            } 

            bool result = true; 

            bool validateKeys = (e.KeyCode == Keys.Enter); 

            bool numericKeys = ( 
                ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || 
                (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)) 
                && e.Modifiers != Keys.Shift 
                && validate); 

            bool ctrlA = e.KeyCode == Keys.A && e.Modifiers == Keys.Control; 

            bool editKeys = ( 
                (e.KeyCode == Keys.Z && e.Modifiers == Keys.Control) || 
                (e.KeyCode == Keys.X && e.Modifiers == Keys.Control) || 
                (e.KeyCode == Keys.C && e.Modifiers == Keys.Control) || 
                (e.KeyCode == Keys.V && e.Modifiers == Keys.Control) || 
                e.KeyCode == Keys.Delete || 
                e.KeyCode == Keys.Back); 

            bool navigationKeys = ( 
                e.KeyCode == Keys.Up || 
                e.KeyCode == Keys.Right || 
                e.KeyCode == Keys.Down || 
                e.KeyCode == Keys.Left || 
                e.KeyCode == Keys.Home || 
                e.KeyCode == Keys.End); 

            bool decimalSeparator = (( 
                e.KeyCode == Keys.Decimal || 
                e.KeyValue == 190 || 
                e.KeyValue == 188)&& 
                TextLength != 0 && 
                SelectionLength == 0); 

            if (decimalSeparator)  
            { 
                if (!_DecimalSeparator) 
                    _DecimalSeparator = true; 
                else 
                    decimalSeparator = false; 
            } 

            if (!(numericKeys || editKeys || navigationKeys || decimalSeparator || validateKeys)) 
            { 
                if (ctrlA)
                    SelectAll();

                result = false; 
            } 

            if (!result)
            { 
                e.SuppressKeyPress = true; 
                e.Handled = true; 

                if (!ctrlA)
                    OnKeyRejected(new KeyRejectedEventArgs(e.KeyCode)); 
            } 
            else 
                base.OnKeyDown(e); 
        } 

        protected override void OnKeyPress(KeyPressEventArgs e) 
        { 
            if (e.KeyChar == ';' || e.KeyChar == '?') 
            { 
                if (!(Text.Contains(",") || Text.Contains("."))) 
                    _DecimalSeparator = false; 
                e.Handled = true; 
            } 
        } 

        protected override void OnTextChanged(EventArgs e) 
        { 
            bool invalid = false; 
            int i = 0; 
            foreach (char c in Text) // Check for any non digit characters. 
            { 
                if (!(char.IsDigit(c) || c == ',' || c == '.')) 
                { 
                    invalid = true; 
                    break; 
                } 

                if (c == ',' || c == '.') 
                    i++; 
            } 

            if (i == 0) 
                _DecimalSeparator = false; 
            else if (i > 1) 
                invalid = true; 

            if (invalid) 
            { 
                Text = ""; 
                return; 
            } 

            if (Text.Contains(".") || Text.Contains(",")) 
            { 
                string charSep = ""; 
                string[] split; 
                string partiEntier = ""; 

                if (Text.Contains(".")) 
                    charSep = "."; 
                else 
                    charSep = ","; 

                split = Text.Split(new char[] { ',', '.' }); 
                partiEntier += split[0]; 
                if (partiEntier == "") 
                    Text = "0" + charSep + split[1]; 
            } 
            base.OnTextChanged(e); 
        } 

        protected override void WndProc(ref Message m) 
        { 
            if (m.Msg == WM_PASTE) 
            { 
                PasteEventArgs e = CheckPasteValid(); 
                if (e.RejectReason != PasteRejectReasons.Accepted) 
                { 
                    m.Result = IntPtr.Zero; 
                    OnPasteRejected(e); 
                    return; 
                } 
            } 
            base.WndProc(ref m); 
        } 

        private PasteEventArgs CheckPasteValid() 
        { 
            PasteRejectReasons rejectReason = PasteRejectReasons.Accepted; 
            string originalText = Text; 
            string clipboardText = string.Empty; 
            string textResult = string.Empty; 

            try 
            { 
                clipboardText = Clipboard.GetText(TextDataFormat.Text); 
                if (clipboardText.Length > 0)
                { 

                    textResult = ( 
                        Text.Remove(SelectionStart, SelectionLength).Insert(SelectionStart, clipboardText)); 
                    foreach (char c in clipboardText)
                    { 
                        if (!char.IsDigit(c)) 
                        { 
                            rejectReason = PasteRejectReasons.InvalidCharacter; 
                            break; 
                        } 
                    } 
                } 
                else 
                    rejectReason = PasteRejectReasons.NoData; 
            } 
            catch 
            { 
                rejectReason = PasteRejectReasons.Unknown; 
            } 
            return new PasteEventArgs(originalText, clipboardText, textResult, rejectReason); 
        } 

        protected virtual void OnKeyRejected(KeyRejectedEventArgs e) 
        { 
            EventHandler<KeyRejectedEventArgs> handler = KeyRejected; 
            if (handler != null) 
                handler(this, e); 
        } 

        protected virtual void OnPasteRejected(PasteEventArgs e) 
        { 
            EventHandler<PasteEventArgs> handler = PasteRejected; 
            if (handler != null) 
                handler(this, e); 
        } 
    } 
}