c# 计算器代码怎样只允许在数字后面输入一个点,至少有1个数字包括0的情况下才能输入,还有计算器的情况~

2025-04-07 10:03:19
推荐回答(2个)
回答1:

首先先写几个子程序。这个是VB里自带的处理字符串的程序。C#里需要自己写。网上也都有
public
static
string
left(string
sSource,
int
iLength)//取sSource左侧iLength位
{
return
sSource.Substring(0,
iLength
>
sSource.Length
?
sSource.Length
:
iLength);
}
public
static
string
right(string
sSource,
int
iLength)//取sSource右侧iLength位
{
return
sSource.Substring(iLength
>
sSource.Length
?
0
:
sSource.Length
-
iLength);
}
public
static
string
Mid(string
sSource,
int
iStart,
int
iLength)//取sSource中间iStart到iLength位
{
int
iStartPoint
=
iStart
>
sSource.Length
?
sSource.Length
:
iStart;
return
sSource.Substring(iStartPoint,
iStartPoint
+
iLength
>
sSource.Length
?
sSource.Length
-
iStartPoint
:
iLength);
}
首先你先要让输入的都是数字,可以用
If(right(textbox.Text)<48||right(textbox.Text)>57)
{
textbox.Text=left(textbox.Text,Len(textbox.Text)-1);
}
这段代码意思是如果输入框最右边一位(即新输入的一位)不是数字,那么就取输入框左边的字符串长度减一位(就是整个字符串除了新输入的那位)
然后就好办了。既然里面都是数字,只要字符串长度Len(textbox.Text)>0那么就至少有一个数字,所以这时如果按下符号键,就加个符号上去

回答2:

我封装好的方法
现在textbox中只能输入浮点数,整数位数、小数位数、正负号可控。如下:
///
///
限制textbox的内容为float类型
///
///
文本框
///
整数个数
///
小数个数
///
是否允许正负号
public
static
void
CheckFloatOfTextBox(TextBox
textBox,
int
intCount,
int
decimalCount,
bool
op)
{
int
charCount
=
textBox.SelectionStart;
CheckFloatOfTextBox(textBox,
intCount,
decimalCount,
op,
textBox.SelectionStart,
ref
charCount);
textBox.SelectionStart
=
charCount;
}
private
static
void
CheckFloatOfTextBox(TextBox
textBox,
int
intCount,
int
decimalCount,
bool
op,
int
startP,
ref
int
charCount)
{
Regex
regex
=
new
Regex(@"^[+-]{0,"
+
(op
?
"1"
:
"0")
+
@"}([0-9]{1,"
+
intCount
+
@"}(\.[0-9]{0,"
+
decimalCount
+
@"}|\.|)$|$)");
int
startPosition
=
startP;
if
(startPosition
==
0)
return;
if
(!regex.IsMatch(textBox.Text))
{
if
(textBox.Text.Length
>
0)
{
textBox.Text
=
textBox.Text.Remove(startPosition
-
1,
1);
startPosition
=
startPosition
-
1;
charCount--;
}
}
else
startPosition
=
startPosition
-
1;
if
(startPosition
>=
0)
CheckFloatOfTextBox(textBox,
intCount,
decimalCount,
op,
startPosition,
ref
charCount);
}