1,小弟的Form上有若干个Edit控件和一个Bitbtn,每个Edit要求输入一个一定范围的浮点数,例如:1.6-29.99,而点击bitbtn,使所有的Edit为空。我现在的问题是:在向Edit输入的过程中,如果出错,使用退格,一旦Edit为空时,就弹出异常,说'' is not a valid float,而如果我加上if Edit.txet='' then exit; 这句的话,一点击Bitbtn,Form就关了,我该怎么办呢,请各位大哥指点。2 我在用SPCOMM控件发数据的时候,例如:
Var
buff : array[1..400] of byte;
begin
writeCommData(@buff,400);
end;
我该怎么判断数据已经完全发送完毕,因为writeCommData函数它一执行成功就马上返回true,相应的数据随后才发送,请各位大哥指点。
Var
buff : array[1..400] of byte;
begin
writeCommData(@buff,400);
end;
我该怎么判断数据已经完全发送完毕,因为writeCommData函数它一执行成功就马上返回true,相应的数据随后才发送,请各位大哥指点。
解决方案 »
- delphi 使用WebBrowser播放ppview
- 请问delphi到底是一门语言还是开发工具!!
- Dataset的Filtered属性设为True后,在只显示一条记录的Dataset上执行post操作时,将会出错?各位大哥如何解决?
- 请高手看看,是关于BMP转ICON时产生的一些异常
- 基础问题
- 请问怎么判断Edit输入的是整型数还是其它字符?
- 再请教一个关于adoquery的问题
- 请告诉我一些Dephi网络编程方面好的网站.谢谢
- 50分相送!帮帮忙
- 为什么用"if RecordCount=1 then pass:=1"可以用来判断数据库字段里的值和Edit1.Text里的值是不是相等??20分!
- 日历算法
- 数据保存时出错"浮点异常...用户进程取消"
一点BITBTN就关了窗体,估计是你的按钮的MODALRESULT值被你设置成了非MrNone。2 我在用SPCOMM控件发数据的时候,例如:
Var
buff : array[1..400] of byte;
begin
writeCommData(@buff,400);
sleep(1000);//---延时1秒。
end;
我该怎么判断数据已经完全发送完毕,因为writeCommData函数它一执行成功就马上返回true,相应的数据随后才发送,请各位大哥指点。
procedure TFixedFrequencyDlg.Edit1Exit(Sender: TObject);
begin
if ((StrToFloat(Edit1.Text)>29.9999) or (StrToFloat(Edit1.Text)<1.6)) then
begin
Edit1.Font.Color :=clRed;
Showmessage('Error!Your input out of range!');
end
else
Edit1.Font.Color :=clBlack;
end;
但是,执行的时候,如果我什么都不输入,就把焦点移动到别的Edit上,马上就会弹出异常对话框,提示你‘’is not a valid float。而且,如果我在Edit1中输入数据,退出的时候焦点自然移到Edit2上,但如果我发现数据输错了,再回头改的时候,相当于Edit2的OnExit事件发生,但这时Edit2也是空的,同样也会弹出一样的异常对话框。
实际上还是原来的那个问题:
if Eidt.Text ='' then
........
写入Exit,也不行,因为我还有后续的操作,如果为exit,后续的操作就执行不了了,
因为我的Form上还有一个Bitbtn,在这个Bitbtn的点击事件中,判断,如果Form上的Edit有一个为空,就弹出对话框,提示用户数据还没有输完,但因为有exit,所以该对话框出现不了。
这个问题,我已经想了好几天了,死活不行,时间又比较紧张。
begin
if edit1.text <> '' then
if ((StrToFloat(Edit1.Text)>29.9999) or (StrToFloat(Edit1.Text)<1.6)) then
begin
Edit1.Font.Color :=clRed;
Showmessage('Error!Your input out of range!');
edit1.SetFocus;
end
else
Edit1.Font.Color :=clBlack;end;
我也有个问题,在另一个版块里,请帮忙解答。
谢谢!
http://community.csdn.net/Expert/topic/5127/5127444.xml?temp=.3603784
这个问题是解决了,可小弟还有一个问题,还是在这个Form上,就像我上面说的那样,有一个Bitbtn,在这个Bitbtn的点击事件里判断,只要有一个Edit的内容为空,就提示说,没有输入完,但我刚才试了,点击后没反应,我的代码是这样写的:
procedure TFixedFrequencyDlg.OkBitBtnClick(Sender: TObject);
begin
if ((TEdit(sender).Text ='') or (TComboBox(sender).ItemIndex=-1)) then
Showmessage('Error!');
end;
Form上还有一些TComboBox。还望大哥能够帮助,谢谢!
不好意思,你的忙我帮不上。我记得离散数学是计算机系的课程吧,我没学过,我是学通信的。
var i: integer;
begin
for i := 0 to Form1.ComponentCount - 1 do
begin
if (Form1.Components[i] is TEdit) and (TEdit(Form1.Components[i]).Text ='')then
begin
showmessage('Error!');
TEdit(Form1.Components[i]).setfocus;
end;
if (Form1.Components[i] is TComboBox) and (TComboBox(Form1.Components[i]).Text='') then
begin
showmessage('Error!');
TComboBox(Form1.Components[i]).setfocus;
end;
end;
end;
begin
if Not(Key in ['0'..'9','.']) then
Key := #0;
end;然后在Edit1Exit事件里写,用strtofloatdef()就不会报你说的那个错了if edit1.text <> '' then
if ((StrToFloatDef(Edit1.Text,0)>29.9999) or (StrToFloatDef(Edit1.Text,0)<1.6)) then
begin
Edit1.Font.Color :=clRed;
Showmessage('Error!Your input out of range!');
edit1.SetFocus;
end
else
Edit1.Font.Color :=clBlack;
if 至少有一个为空 then
statement1
else
statement2
只要有一个为空,statement2的代码就不执行,只有全不为空的情况下,才执行statement2的代码,该怎么写呢?谢谢!
FOR循环就是控制让所有的EDIT,COMBOBOX都检查
procedure TFixedFrequencyDlg.OkBitBtnClick(Sender: TObject);
Var
i : Integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if ((Components[i] is TEdit) and (TEdit(Components[i]).Text ='')) or ((Components[i] is TComboBox) and (TComboBox(Components[i]).Text=''))then
begin
showmessage('Error!');
TEdit(Components[i]).setfocus;
end
else
MainForm.BitBtn1.Font.Color :=clRed;
end;
end;MainForm是我程序的主界面,Bitbtn1是主界面上的一个按钮,我的本意是只有当10个Edit和10个ComboBox的内容全不为空时,使Bitbtn1的颜色为红色,但是我试了半天,即使20个控件当中,有的内容为空,比如:总共有5个是空的,在弹出5个Error对话框后,Bitbtn的颜色就变成红色了,这和我程序的初衷是不符合的,因为我必须确保数据没有空的,然后在主程序中,根据Bitbtn的颜色来判断,进行下一步的操作,但如果这样的话就判断不准确了。还望你能够指点。