当前位置:文档之家› textbox中只能输入数字的方法

textbox中只能输入数字的方法

TextBox中只能输入数字的几种常用方法(C#)

private void tBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 0x20) e.KeyChar = (char)0; //禁止空格键
if ((e.KeyChar == 0x2D) && (((TextBox)sender).Text.Length == 0)) return; //处理负数
if (e.KeyChar > 0x20)
{
try
{
double.Parse(((TextBox)sender).Text + e.KeyChar.ToString());
}
catch
{
e.KeyChar = (char)0; //处理非法字符
}
}
}



private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar!=8&&!Char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
或者private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar!='\b'&&!Char.IsDigit(e.KeyChar))
{
e.Handled = true;
}

}


private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if(e.KeyChar!='\b')//这是允许输入退格键
{
if((e.KeyChar<'0')||(e.KeyChar>'9'))//这是允许输入0-9数字
{
e.Handled = true;
}
}
}





private void button1_Click(object sender, EventArgs e)
{
string text = this.textBox1.Text;
if (text != null)
MessageBox.Show(text);
}

private void textBox1_Validating(object sender, CancelEventArgs e)
{
const string pattern = @"^\d+\.?\d+$";
string content = ((TextBox)sender).Text;

if (!(Regex.IsMatch(content, pattern)))
{
errorProvider1.SetError((Control)sender, "只能输入数字!");
e.Cancel = true;
}
else
errorProvider1.SetError((Control)sender, null);
}



private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if(e.KeyChar=='.' && this.textBox1.Text.IndexOf(".")!=-1)
{
e.Handled=true;
}

if(!((e.KeyChar>=48 && e.KeyChar<=57) || e.KeyChar=='.' || e.KeyChar==8))
{
e.Handled=true;
}

}



private void tbx_LsRegCapital_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsNumber(e.KeyChar) && !Char.IsPunctuation(e.KeyChar) && !Char.IsControl(e.KeyChar))
{
e.Handled = true;//消除不合适字符
}
else if (Char.IsPunctuation(e.KeyChar))
{
if (e.KeyChar != '.' || this.textBox1.Text.Length == 0)//小数点
{
e.Handled = true;
}
if (https://www.doczj.com/doc/5f12010864.html,stIndexOf('.') != -1)
{
e.Handled = true;
}
}
}







利用ASCII码处理办法、
{

if ((e.KeyChar <= 48 || e.KeyChar >=57) && (e.KeyChar != 8) && (e.KeyChar != 46))
e.Handled = true;
================48代表0,57代表9,8代表空格,46代表小数点
}






int x = 4;
float[] f = { 1 , 20, 0.05f, 400, 10000.2f};
foreach (float t in f)
{
string s = t.ToString("0.0000000000");
int i = Math.Max(s.IndexOf("."), x);
Console.WriteLine(s.Remove(i));
}
2007-12-21 | C#中如何限制在TextBox控件中只能输入非负数 在textbox的TextChanged事件中添加以下代码:

if (Regex.IsMatch(this.tb_LateMinute.Text.Trim(), "^((+)d)?d*$"))
{ }
else
{
MessageBox.Show("迟到延迟分钟只能为非负整数!", "提示", MessageBoxButtons.OK, https://www.doczj.com/doc/5f12010864.html,rmation);
tb_LateMinute.Focus();
}







FileStream.Position <= FileStream.Length


using System;
using System.IO;
using System.Text;

class Test
{
public static void Main()
{
string path = @"c:\temp\MyTest.txt";

// Delete the file if it exists.
if (!File.Exists(path))
{
// Create the file.
using (FileStream fs = File.Create(path))
{
Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");

// Add some information to the file.
fs.Write(info, 0, info.Length);
}
}

// Open the stream and read it back.
using (FileStream fs = File.OpenRead(path))
{
byte[] b = new byte[1024];
UTF8Encoding temp = new UTF8Encoding(true);

while (fs.Read(b,0,b.Length) > 0)
{
Console.WriteLine(temp.GetString(b));
}
}
}
}


public MyHeadInfo DecryptStream(ref MemoryStream ReturnStream, string aFromFileName)
{
FileStream aFileReaderr = new FileStream(aFromFileName, FileMode.Open);
CryptoStream aCryptoReader = new CryptoStream(aFileReaderr, CryptoProvider.CreateDecryptor(key, iv), CryptoStreamMode.Read);
BinaryReader aStreamReader = new BinaryReader(aCryptoReader, Encoding.Unicode);
MyHeadInfo returnInfo = new MyHeadInfo();//我自定义的文件头信息
int tmpReadLength = aStreamReader.ReadInt32();//文件头长度
byte[] tmpHead

= aStreamReader.ReadBytes(tmpReadLength);
returnInfo.FromBytes(tmpHead, 0, tmpHead.Length);
int ReadCount = 0;
byte[] tmpRead = new byte[1024];
ReadCount = aStreamReader.Read(tmpRead, 0, tmpRead.Length);
while (ReadCount > 0)
{
ReturnStream.Write(tmpRead, 0, ReadCount);//真正的文件流信息
ReadCount = aStreamReader.Read(tmpRead, 0, tmpRead.Length);
}
aStreamReader.Close();
aCryptoReader.Close();
aFileReaderr.Close();
return returnInfo;
}

public void EncryptStream(MyHeadInfo aHead, Stream aStream,string aToFileName)
{
if (aStream.CanRead==false) return;
FileInfo fInfo = new FileInfo(aToFileName);
aHead.FileExpand = fInfo.Extension;
FileStream aFileWriter = new FileStream(aToFileName, FileMode.Create);
CryptoStream aCryptoWriter = new CryptoStream(aFileWriter, CryptoProvider.CreateEncryptor(key, iv), CryptoStreamMode.Write);
BinaryWriter aStreamWriter = new BinaryWriter(aCryptoWriter, Encoding.Unicode);

byte[] HeadBytes = aHead.ToBytes();
int HeadLength = HeadBytes.Length;
byte[] HeadLengthBytes = BitConverter.GetBytes(HeadLength);
aStreamWriter.Write(HeadLengthBytes);
aStreamWriter.Write(HeadBytes);
int ReadCount=0;
byte[] tmpRead=new byte[1024];
aStream.Position = 0;
ReadCount=aStream.Read(tmpRead,0,tmpRead.Length);
while(ReadCount > 0)
{
aStreamWriter.Write(tmpRead,0,ReadCount);
ReadCount=aStream.Read(tmpRead,0,tmpRead.Length);
//此处加入进度事件调用
}

aStreamWriter.Close();
aCryptoWriter.Close();
aFileWriter.Close();
}














FileStream stream = new FileStream(path);
byte[] writeData = new byte[8192];
// Use the ReadAllBytesFromStream to read the stream.

while (true)
{
int size = stream.Read(writeData, 0, writeData.Length);
if (size > 0)
{
//你操作数据的代码
}
else
{
break;
}
}
stream.Close();




int b;
FileStream fs=new FileStream(@"F:\cym\temp\1.bak",System.IO.FileMode.Open);
while(true)
{
b=fs.ReadByte();
if(b!=-1)
{
textBox1.Text+=(char)b;
}
else
{
break;
}
}
fs.Close();



如果不知道原文件的大小,可以这样:
FileStream fs2 = new FileStream("2.txt", FileMode.Create);
byte[] buffer = new byte[4096];//这里的大小可以设置为ReceiveBufferSize
while ((count = fs.Read(buffer, 0, buffer.Length)) != 0)
{
buffer.Initialize();//将buffer初始化,避免出现后半部不更新的情况。
string str = System.Text.Encoding.ASCII.GetString(buffer);
str = str.TrimEnd('\0');//将后面冗余的'\0'去掉
richTextBox1.Text += str;

fs2.Write(buffer,0, str.Length);//注意这里取得是str的长度而不是buffer的长度。
}
fs2.Close();
——————————————
简单分析一下:
1.buffer长度较小,不会一次从fs中读取所有数据。那么在倒数第二次取完byte之后,最后一次可能会出现剩余的待取字节不足buffer长度的情况,buffer只有前半部分被更新,后面剩余了倒数第二次取得的字节。所以会有冗余的字节存在buffer里面,写出来的时候相应的冗余字节也被存到文件和richText里面了。

2.buffer长度很大,一次能从fs里取完所有字节。此时在richeText里面看到的是正常的。但由于buffer后面还有大量的空余字节,而且它们被初始化为“\0”,所以存在txt文件中会显示为空格。而且txt的文件大小也等同于buffer的大小而不是原文件的大小。

解决办法:
将buffer的大小设为fs字节流同样的大小。即:
FileStream fs = File.OpenRead("1.txt");
int count = 1;
FileStream fs2 = new FileStream("2.txt", FileMode.Create);
byte[] buffer = new byte[fs.Length];
就可以解决上述问题了。

相关主题
文本预览
相关文档 最新文档