求助自定义方法和正则表达式

ftwgg912 2010-06-01 02:22:25
有N个textbox控件,我想让他们都只能输入两位小数的实数,在textbox里输入值过后,值如果满足正则表达式则不做操作,不满足则清空相应的textbox,我想写到一个方法里面,然后所有textbox控件的leave事件都可以调用这个这个方法,不满足就可以清空对应的textbox应该要怎么做?在清空那里卡住了~帮帮忙~散分了
void 交通金额合计(string txt)//这里txt是调用方法是获取使用该方法的textbox的值
{
Regex reg = new Regex("^[0-9]+(.[0-9]{2})?$");//使用正则表达式判断输入的是否为数字
if (reg.IsMatch(txt))
{
//不做操作
}
else
{
MessageBox.Show("只能输入两位小数的正实数!");
//这里需要清空调用这个方法的textbox的值,不知道怎么写了
return;
}
}
例如textbox1里面输入abcd就会报错,然后让他清空textbox1.
private void textbox1_Leave(object sender, EventArgs e)
{
交通金额合计(textbox1.Text);
}
...全文
160 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
ftwgg912 2010-06-01
  • 打赏
  • 举报
回复
我始终坚信~在这领域里只有想不到没有做不到~!哈哈
ftwgg912 2010-06-01
  • 打赏
  • 举报
回复
PaulLeder你那方法可以~小弟受益匪浅~这问题困扰我好久,虽然没分了不过很感激你~还有其它帮忙的兄弟
ftwgg912 2010-06-01
  • 打赏
  • 举报
回复
PaulLeder,你怎么不早来呢。。刚发了分
deknight 2010-06-01
  • 打赏
  • 举报
回复
行了,接分了
PaulLeder 2010-06-01
  • 打赏
  • 举报
回复
你把当前的对象传进去不就可以了
void 交通金额合计(object sender)//这里txt是调用方法是获取使用该方法的textbox的值
{
TextBox txt=sender as TextBox;
Regex reg = new Regex("^[0-9]+(.[0-9]{2})?$");//使用正则表达式判断输入的是否为数字
if (reg.IsMatch(txt.Text))
{
//不做操作
}
else
{
MessageBox.Show("只能输入两位小数的正实数!");
txt.Text="";
//这里需要清空调用这个方法的textbox的值,不知道怎么写了
return;
}
}

private void textbox1_Leave(object sender, EventArgs e)
{
交通金额合计(sender);
}

======================================================
再说就是检测动作,需要用到服务端么?
deknight 2010-06-01
  • 打赏
  • 举报
回复
用LS的可行,但是你说遍历不行,怎么可能不行?我刚才测试了


foreach (object mycons in this.Controls)
{
if (mycons.GetType().ToString() == "System.Windows.Forms.TextBox")
{
TextBox mybox = (TextBox)mycons;
mybox.Text = "";
}
}
兔子-顾问 2010-06-01
  • 打赏
  • 举报
回复
自定义文本框吧。

public class MyTextbox : TextBox
{
private Regex regExp = new Regex("");

public string RuleRegex
{
get { return regExp.ToString(); }
set
{
try
{
regExp = new Regex(value);//尝试匹配
}
catch
{
regExp = new Regex("");
}
}
}

protected override void OnLeave(EventArgs e)
{
base.OnLeave(e);
if (!regExp.IsMatch(this.Text)) this.Text = string.Empty;
}
}


然后编译一次,在工具箱中拖出这个控件在窗体,用这个自定义的正则文本框。
ftwgg912 2010-06-01
  • 打赏
  • 举报
回复
算了我还是挨个到每个textbox事件里面去写正则表达式吧
遍历我也试过的,不行的~
谢谢大家
Xiaoyuan245437 2010-06-01
  • 打赏
  • 举报
回复
用委托可以实现``
兔子-顾问 2010-06-01
  • 打赏
  • 举报
回复
貌似没有吧。你操作个界面。输入错误,文本框就消失不见了。哈哈。错误一次少一个控件,恶作剧软件差不多。哈。
deknight 2010-06-01
  • 打赏
  • 举报
回复
这样是全清... 如你所说的,清那个特定的textbox,我有点头晕,突然没了头绪
ftwgg912 2010-06-01
  • 打赏
  • 举报
回复
wuyazhe见笑了。。没这种功能吗??
deknight 2010-06-01
  • 打赏
  • 举报
回复
那就遍历呗

foreach (object mycons in this.form1.Controls)
{
if (mycons.GetType().ToString() == "System.From.TextBox")//好象是这样,忘了...
{
TextBox mybox= (TextBox)mycons;
mybox.Text = "";
}
}
ftwgg912 2010-06-01
  • 打赏
  • 举报
回复
deknight大概就是那个意思,在方法里先判断是哪个textbox调用了他,如果不符合正则表达式就让那个textbox.text="";
兔子-顾问 2010-06-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 deknight 的回复:]
你的意思是,你不知道这个txt是在哪个textbox里输入的,如果发现某textbox传过来的参数txt不符合正则,就清空那个textbox?
[/Quote]

穿越了。这样的设计真。哈哈。
ftwgg912 2010-06-01
  • 打赏
  • 举报
回复
一般情况下如果是在每个textbox里写就应该是这样,但是这样很麻烦,以后要改正则表达式的话要每个textbox事件里面的代码都去修改。
private void textbox1_Leave(object sender, EventArgs e)
{
Regex reg = new Regex("^[0-9]+(.[0-9]{2})?$");//使用正则表达式判断输入的是否为数字
if (reg.IsMatch(textbox1.text))
{
//不做操作
}
else
{
MessageBox.Show("只能输入两位小数的正实数!");
textbox1.text="";
return;
}
}
兔子-顾问 2010-06-01
  • 打赏
  • 举报
回复
textbox1.Text = string.Empty;
deknight 2010-06-01
  • 打赏
  • 举报
回复
你的意思是,你不知道这个txt是在哪个textbox里输入的,如果发现某textbox传过来的参数txt不符合正则,就清空那个textbox?
ftwgg912 2010-06-01
  • 打赏
  • 举报
回复
因为调用这个方法的textbox很多
我不想在每个textbox事件里面都来重复写一次正则表达式验证
所以才想建一个方法,让每个textbox调用
ftwgg912 2010-06-01
  • 打赏
  • 举报
回复
对就是textbox1.text=="";
加载更多回复(1)

110,501

社区成员

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

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

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