请问各位大虾,我的Edit1中要求只能输入下列格式的日期2004-3-25,如果输入别的,要求提示出错,该怎么实现?

zameszhang 2004-05-08 01:12:00
请问各位大虾,我的Edit1中要求只能输入下列格式的日期2004-3-25,如果输入别的,要求提示出错,该怎么实现?

非常感谢!!!
...全文
110 32 点赞 打赏 收藏 举报
写回复
32 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
MarsRich 2004-05-11
我觉得以上有不少方法都可以实现你的目的了。
一、通过数据库的检测功能,使错误的录入自动抛出异常。 我觉得简单有效,缺点是控制不够灵活,对用户的录入检测不够完全。
二、当dbedit exit时,分析。 我不知道你为什么认为这样不行。
三、用日期型的数据录入控件,CB里有没有我就不太清楚。不过第三方控件多的是。
四、借用CB里的标准Mask控件或是日期控件,仅是简单的相互复制,我也不清楚你为什么觉得麻烦。
五、自己改写dbedit。
可能还有更多更好的其它方法。慢慢想吧,过了个难关,实际就是一次提高。
  • 打赏
  • 举报
回复
robbyzi 2004-05-09
用DateTimePicker1不就行了吗?(win32控件里)
而且操作很简单。
  • 打赏
  • 举报
回复
zameszhang 2004-05-09
各位大侠,请你们展示出你们的风采吧!!!
小弟我一直在线等待啊!!!
  • 打赏
  • 举报
回复
lzf20lzf 2004-05-09
回复人: zameszhang(zhang) ( ) 信誉:100 2004-05-09 11:23:00 得分:0


tiegerium(/*为生活写程序*/)
捡别人的是所以意思?

----------------------------------------------------------
不是说你的吧,看时间就知道

  • 打赏
  • 举报
回复
zameszhang 2004-05-09
tiegerium(/*为生活写程序*/)
捡别人的是所以意思?

我知道TDBEdit当绑定到数据源的日期字段时是会检测日期输入的合法性的,我现在就是不要系统检查合法性,而是要处理我自己的错误处理函数啊,系统的提示不是很人性化,例如是用英文等等。
  • 打赏
  • 举报
回复
zameszhang 2004-05-09
因为DBEdit1是和数据库中的一个日期字段相联系的,所以在DBEdit1->Text这个语句中,如果DBEdit1里输入的不是日期型,系统会判断,然后就抛出异常错误:例如“1不是一个有效的日期类型”,根本没机会执行自己的错误处理函数
  • 打赏
  • 举报
回复
真如实观 2004-05-09
楼上怎么捡别人的?
楼主怎么意思啊!你的TDBEdit当绑定到数据源的日期字段时是会检测日期输入的合法性的。
  • 打赏
  • 举报
回复
zameszhang 2004-05-09
JetKingLau(时差)::(一叠昨天)
你好,你的错误处理的代码非常好,我也放在OnExit中试了试,还是不行,我跟踪了一下,根本就执行不到这里,在这个语句AnsiString str = Edit1->Text之前系统就报错,例如“1不是一个有效的日期类型”
不知道还有没有别的方法。
谢谢大家啊!!!
小弟特别着急,分不够再加!!!
  • 打赏
  • 举报
回复
jevin8011 2004-05-09
放在OnExit事件中处理
  • 打赏
  • 举报
回复
真如实观 2004-05-09
在TDBEdit上不用IsValidDate()判断,如果格式不对会自行判断,你那个代码好象不能
格式化输入吧?比如我只闭着眼睛输入:20040212会自行变为2004-02-12?
  • 打赏
  • 举报
回复
zameszhang 2004-05-09
高手都去哪里了啊???!!!
到现在问题还没解决呢!!!
300分求助!!!
  • 打赏
  • 举报
回复
COKING 2004-05-09
mark
  • 打赏
  • 举报
回复
真如实观 2004-05-09
不好意思,不是说你的,我看不惯有人拿别人的分析来回贴:“放在OnExit事件中处理”。如果说:“我帮你顶”倒可忍受,但不能总是重复别人的。

...好象不用自己的错误处理函数吧?重新引发异常吧?throw可以吗?你用try...catch也没用。

  • 打赏
  • 举报
回复
JetKingLau 2004-05-08
把偶的代码放到 OnExit 事件中试试。
  • 打赏
  • 举报
回复
真如实观 2004-05-08
改成函数,容易调用。
void __fastcall TForm1::SetDateOnDBEdit(TDBEdit *DBEdit)
{
if(DBEdit->Text=="")
{
DBEdit->Text="--";
DBEdit->SelStart=0;
}
else if(DBEdit->Text.Length()==6)
{
DBEdit->SelStart=5;
}
else if(DBEdit->Text.Length()==8)
{
DBEdit->SelStart=9;
}
}
void __fastcall TForm1::DBEdit1Change(TObject *Sender)
{
SetDateOnDBEdit(DBEdit1);
}
//---------------------------------------------------------------------------
  • 打赏
  • 举报
回复
真如实观 2004-05-08
呵呵,我用一个很笨且搞笑的办法:
void __fastcall TForm1::DBEdit1Change(TObject *Sender)
{
if(DBEdit1->Text=="")
{
DBEdit1->Text="--";
DBEdit1->SelStart=0;
}
else if(DBEdit1->Text.Length()==6)
{
DBEdit1->SelStart=5;
}
else if(DBEdit1->Text.Length()==8)
{
DBEdit1->SelStart=9;
}
}
//居然也能用!有谁完善一下。
  • 打赏
  • 举报
回复
martian6125 2004-05-08
小弟很笨 没明白 DBEDIT不能直接进行写入吧 我说的是程序在运行时用键盘往DBEDIT里输入 好像不行的
  • 打赏
  • 举报
回复
zameszhang 2004-05-08
难道就没人会吗?
  • 打赏
  • 举报
回复
zameszhang 2004-05-08
非常感谢 超重低音
不过
dbedit->onchange 这个方法不行的,我试过了
后一种方法实在太麻烦了.
  • 打赏
  • 举报
回复
MarsRich 2004-05-08
在dbedit->onchange中处理不就结了?

另外再告诉你一个偷懒的方法:

把你那个dbedit的设成不可视, 在相同位置上放一个maskedit之类的东西,只要在读取数据库时同时更新maskedit的text,使其与dbedit内的信息相同。在maskedit exit等事件中(看你自己的需要了),用MaskEdit的内容替换dbedit中的内容。
虽然笨了点,不过比较实用~~
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
C++ Builder
加入

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2004-05-08 01:12
社区公告
暂无公告