如何在文本框中输入数字后自动显示带千位分隔符的格式

rubbishwang 2006-11-30 10:24:34
在文本框中输入数字,动态的能判断有几位数字,如果输入第四个数字的时候能自动在文本框中显示千位分隔符,输入第七个数字的时候能自动显示第二个千位分隔符.类推.
希望能在文本框中动态显示...

谢谢
...全文
2005 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
rubbishwang 2006-11-30
  • 打赏
  • 举报
回复
如何在textBox1_TextChanged 这样一个事件中去实现输入数字自动出现千位分隔符呢...
muyanpeng_mail 2006-11-30
  • 打赏
  • 举报
回复
mark
rubbishwang 2006-11-30
  • 打赏
  • 举报
回复
能不能请具体一点... 谢谢...
conggang 2006-11-30
  • 打赏
  • 举报
回复
帮输入的数值转换成字符串,然后用ToString("###,###") 的方式转化一下就可以了!
xvting 2006-11-30
  • 打赏
  • 举报
回复
一种方法
给TextBox添加2种状态,显示状态和编辑状态
在显示状态下:TextBox的值表示为格式化值
在编辑状态下:TextBox的值表示为正常数字值


/////////////////////////////////////////////////////////////////
public enum TextBoxMode {
//显示模式
Display,
//编辑模式
Edit};

public class TextBoxPlus : System.Windows.Forms.TextBox
{
#region 变量
private double m_Value;
private TextBoxMode m_Mode;
#endregion

#region 属性
private string EditText
{
get
{
if (m_Mode != TextBoxMode.Edit)
{
throw new Exception("在非编辑模式下不能取得EditText值");
}

return this.Text;
}
set
{
if (m_Mode != TextBoxMode.Edit)
{
throw new Exception("在非编辑模式下不能设置EditText值");
}

this.TextChanged -= new EventHandler(TextChangedHandler);

this.Text = value;

this.TextChanged += new EventHandler(TextChangedHandler);
}
}

private string DisplayText
{
get
{
if (m_Mode != TextBoxMode.Display)
{
throw new Exception("在非显示模式下不能取得DisplayText值");
}

return this.Text;
}
set
{
if (m_Mode != TextBoxMode.Display)
{
throw new Exception("在非显示模式下不能设置DisplayText值");
}

this.TextChanged -= new EventHandler(TextChangedHandler);
this.Text = value;
this.TextChanged += new EventHandler(TextChangedHandler);
}
}

public TextBoxMode Mode
{
get
{
return m_Mode;
}
set
{
if (m_Mode != value)
{
m_Mode = value;
OnModeChanged();
}
}
}
#endregion

#region 构造器
public TextBoxPlus() : base()
{
m_Mode = TextBoxMode.Display;
this.TextAlign = HorizontalAlignment.Right;
this.TextChanged += new EventHandler(TextChangedHandler);
}
#endregion

//TextChanged事件处理
private void TextChangedHandler(object sender, System.EventArgs e)
{
if (m_Mode == TextBoxMode.Display)
{
SetDisplayTextToValue();
}
else
{
SetEditTextToValue();
}
}

private void SetValueToDisplayText()
{
////////////////////////////////////////////////
//在这里加上数字格式化的代码
//例:把数字格式化为保留小数点3位显示
this.DisplayText = m_Value.ToString("0.000");
/////////////////////////////////////////////////
}

private void SetValueToEditText()
{
this.EditText = m_Value.ToString();
}

private void SetEditTextToValue()
{
try
{
m_Value = double.Parse(this.EditText);
}
catch(Exception)
{

}
}

private void SetDisplayTextToValue()
{
throw new Exception("不能在显示值模式下修改Value值");
}

//模式变换事件处理
private void OnModeChanged()
{
if (m_Mode == TextBoxMode.Display)
{
SetValueToDisplayText();
}
else
{
SetValueToEditText();
}
}

//只能输入数字
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress (e);

switch(e.KeyChar)
{
case '1': return;
case '2': return;
case '3': return;
case '4': return;
case '5': return;
case '6': return;
case '7': return;
case '8': return;
case '9': return;
case '0': return;
case '.':
if (this.Text.IndexOf('.') != -1)
{
e.Handled = true;
}
return;
case (char)Keys.Back : return;
case (char)Keys.Left : return;
case (char)Keys.Right : return;
default : e.Handled = true;
return;
}
}

protected override void OnLeave(System.EventArgs e)
{
base.OnLeave(e);
this.Mode = TextBoxMode.Display;
}

protected override void OnGotFocus(System.EventArgs e)
{
base.OnGotFocus(e);
this.Mode = TextBoxMode.Edit;
}
}
conggang 2006-11-30
  • 打赏
  • 举报
回复
自己就判断吧,读取输入的东西,小数点后超过3位后面的不显示就可以了
rubbishwang 2006-11-30
  • 打赏
  • 举报
回复
那请问... 如果限定小数位数是几位呢...
比如限定小数位数3位... 未满3位的情况下... 有多少显示多少,如:34.45
如果超过3位则输入不能...
cancerser 2006-11-30
  • 打赏
  • 举报
回复
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
CultureInfo ci=(CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
NumberFormatInfo nfi=ci.NumberFormat;
nfi.CurrencyPositivePattern=1;
nfi.CurrencyDecimalDigits=0;
nfi.CurrencyGroupSeparator=",";
nfi.CurrencySymbol="";
ci.NumberFormat=nfi;
Thread.CurrentThread.CurrentCulture=ci;
//以上这些可不写到此事件中 如load里
string str=textBox1.Text;
textBox1.Text=Decimal.Parse(textBox1.Text.Trim()).ToString("c");
textBox1.SelectionStart=textBox1.Text.Length;
}
yuzhlhua 2006-11-30
  • 打赏
  • 举报
回复
等待高人的出现...
yuzhlhua 2006-11-30
  • 打赏
  • 举报
回复
实在不好意思了,想不到了!
如果不要求,可以在光标离开的时候在转化.
tostring("n2") n 表示有千位分隔符 2表示小数的位数.
rubbishwang 2006-11-30
  • 打赏
  • 举报
回复
yuzhlhua 那个... 我一输入数字自动会出现小数点以及后面两位,如:5.00,然后光标会自动跳到数字的最前面
yuzhlhua 2006-11-30
  • 打赏
  • 举报
回复
我写的方法你试试,别忘了输入的时候判断一下,字母是不对的.
rubbishwang 2006-11-30
  • 打赏
  • 举报
回复
是随意输入一个数字... 不一定是整数... 小数位数也没规定... 反正就是小数点后面的不加千位分隔符... 小数点前的整数加千位分隔符...
ilove8 2006-11-30
  • 打赏
  • 举报
回复
up
yuzhlhua 2006-11-30
  • 打赏
  • 举报
回复
如果是整数的话,用toint32就行了
textBox1.Text = Convert.ToDecimal(textBox1.Text).ToString("n2");
PowerBI系列之基础和可视化技能专题基础概念PowerBI是什么PowerBI优秀作品展示PowerBI组件简介 PowerBI Desktop的下载安装PowerBI Desktop界面介绍和5分钟入门 PowerBI账号区别PowerBI对象和结构PowerBI和Tableau等其他主流BI产品的介绍 PowerBI官方文档基本操作文件和报表设置选项介绍页面属性设置-大小、背景、壁纸、对齐、筛选器窗格格式页面视图-适应页面、宽度、实际大小视觉对象格式属性面板快速调整页面布局和样式 (文本笔记)视觉对象分组、显示或隐藏 使用数据对象表和数据点表   向报表添加文本框和形状可视化技能使用编辑交互功能来控制图表联动多层联动控制使用Control Click切片器的使用同步切片器折叠切片器给切片器设定默认值给切片器设定动态默认值(DAX函数-默认当前月或天)使切片器默认代表无任何选择切片器仅显示有对应数据的选项使切片器反向筛选和计算切片器之间取数据并集关系多端的切片器筛选一端的切片器参数的创建和参数切片器的使用筛选器书签和选择窗格下拉式多级菜单页面导航菜单报表主页设计和重置切片器普通和自定义以及视觉对象标头工具提示按列排序和自定义排序分组装箱普通钻取和层次钻取及跨页钻取保留所有筛选器和设置钻取按钮跨报表钻取Matrix 矩阵详解矩阵为每个列快速设置相同列宽矩阵动态显示列的两种方法使用Web超链接和图片超链接文本框设置超链接或邮件地址手机端页面布局创建参数和使用报表模块(输入或值列表)利用报表模板和参数控制线下报表数据权限利用参数实现数据手工加密和权限控制利用页面导航控制页面级权限报表主题控制和主题模板生成器PBIX和PBIT文件结构解析:提取图片和主题,提取已下架的自定义图表,报表元数据等 PBIDS预定义数据连接文件DAX函数使可视化强大 DAX函数实现特殊符号的使用 DAX函数实现切片器默认当前月或天 DAX函数使切片器默认代表无任何选择 DAX函数使切片器仅显示有数据的选项 DAX函数使切片器反向筛选和计算 DAX函数使切片器之间取并集 DAX函数使关系多端的切片器筛选一端的切片器DAX函数实现年月共同决定数据排序DAX函数实现动态图表标题DAX函数实现动态图表配色和图标DAX函数实现动态纵坐标DAX函数实现动态横坐标  

110,536

社区成员

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

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

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