自定义 Textbox?

waterjkd 2007-12-27 12:18:40
下面的代码自定义了一个输入数字的textbox控件,我想如何能在输入111后自动在后面追加一个‘,’呢?注意是在输入完第三个1后自动追加。
下面的代码怎么修改?3KS


public class NumericTextBox : TextBox
{
bool allowSpace = false;

// Restricts the entry of characters to digits (including hex), the negative sign,
// the decimal point, and editing keystrokes (backspace).
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);

NumberFormatInfo numberFormatInfo = System.Globalization.CultureInfo.CurrentCulture.NumberFormat;
string decimalSeparator = numberFormatInfo.NumberDecimalSeparator;
string groupSeparator = numberFormatInfo.NumberGroupSeparator;
string negativeSign = numberFormatInfo.NegativeSign;

string keyInput = e.KeyChar.ToString();

if (Char.IsDigit(e.KeyChar))
{
// Digits are OK

}
else if (keyInput.Equals(decimalSeparator) || keyInput.Equals(groupSeparator) ||
keyInput.Equals(negativeSign))
{
// Decimal separator is OK
}
else if (e.KeyChar == '\b')
{
// Backspace key is OK
}
// else if ((ModifierKeys & (Keys.Control | Keys.Alt)) != 0)
// {
// // Let the edit control handle control and alt key combinations
// }
else if (this.allowSpace && e.KeyChar == ' ')
{

}
else
{
// Swallow this invalid key and beep
e.Handled = true;
// MessageBeep();
}
}


public int IntValue
{
get
{
return Int32.Parse(this.Text);
}
}

public decimal DecimalValue
{
get
{
return Decimal.Parse(this.Text);
}
}

public bool AllowSpace
{
set
{
this.allowSpace = value;
}

get
{
return this.allowSpace;
}
}
}
...全文
168 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2007-12-27
  • 打赏
  • 举报
回复
我的意思就是111,232,123,443,343,每三个数字后就加“,”不知道lz是不是这个意思?
叶子 2007-12-27
  • 打赏
  • 举报
回复
提个思路,判断textbox上的字符去“,”后的长度!当其能被3整除时,加个“,”。
CMIC 2007-12-27
  • 打赏
  • 举报
回复
关于解决这个问题我的一种另想法,共ls参考

1. 当用户输入新的字符时(OnKeyPress事件),获取所有文本框内字符串,用string.Replace(",","")获取去掉的","字符串。如200,000被转换成200000。
2. 用decimal.TryParse()判断是否是合法的数字字符串。
3.使用string.format("N")出格式化字符串,然后把它填充回这个文本框。


waterjkd 2007-12-27
  • 打赏
  • 举报
回复
ls理解正确
GhostAdai 2007-12-27
  • 打赏
  • 举报
回复
LS的想像力够丰富,看清楚LZ的意思,他是要做个只接受数字(标准型和科学型)不接受字母或其他非数学型字符的控件!
yuan731 2007-12-27
  • 打赏
  • 举报
回复
LZ请把你的要求说清楚点,输入
a111
之后变成a111,
再接着输入111
变成a111,111,
是这样不?
那如果输入a11a
回过来在11后输入1呢?
变成a111,a?
ezsea 2007-12-27
  • 打赏
  • 举报
回复
先在类里添加一个字段,int press = 0;用来临时保存按1的次数

在你的OnKeyPress里的if (Char.IsDigit(e.KeyChar))段里添加一段
if (e.KeyChar == '1')
{
press++;
}
else if( e.KeyChar != '1' )
{
press = 0;
}

然后添加一个重载
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp (e);
if( press == 3 )
{
int start = this.SelectionStart; // 定义光标的位置,不然this.Text += ","后光标回到第一个位置
this.Text += ",";
press = 0;
this.SelectionStart = start + 1;
}
}
cmy7895 2007-12-27
  • 打赏
  • 举报
回复
厉害!
waterjkd 2007-12-27
  • 打赏
  • 举报
回复
ILVCNET 谢谢,我看了你的代码,是好用的。不过我想通过重载textbox的keypress事件来做一个自定义控件,
所以想修改一下我上面的代码。
我想要得功能还有很多其他的方法可以实现,我只是想看看上面的代码能不能修改一下,实现这个功能。
ILVCNET 2007-12-27
  • 打赏
  • 举报
回复
不好意思,我不太喜欢看别人写的代码,因为你的思路我不太清楚,但是你目的我明白了,就是要在文本框中输入完"111"后,文本框中的内容变成"111,"(不含引号),我加了个函数,不知道行不行,我已经试过了,在我的机子上是行的,代码如下:

private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text == "111") textBox1.Text = textBox1.Text + ","; \\就是捕捉一个文本框内容改变事件
}

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧