delphi设置保存和edit的输入约束
向各位前辈请教一下,请大家说的详细点1.我在edit的onchange事件里写了procedureTFrmMain.Edit1Change(Sender:TObject)...
向各位前辈请教一下,请大家说的详细点
1.我在edit的onchange事件里写了
procedure TFrmMain.Edit1Change(Sender: TObject);
begin
if strtoint(edit1.text)>23 then
MessageBox(Handle, '请输入小于24的数字', PChar('输入错误'), MB_OK + MB_ICONINFORMATION);
end;
我希望输入小于24的数字,可是每次在清空edit时,他也会判断,显示数据类型不对,我知道那里错了,因为数据为空,可是我还是需要判断的键入值。请问一下怎么改.
2.如图,我想图上的下拉菜单的改变以后,程序可以记住我的设置 展开
1.我在edit的onchange事件里写了
procedure TFrmMain.Edit1Change(Sender: TObject);
begin
if strtoint(edit1.text)>23 then
MessageBox(Handle, '请输入小于24的数字', PChar('输入错误'), MB_OK + MB_ICONINFORMATION);
end;
我希望输入小于24的数字,可是每次在清空edit时,他也会判断,显示数据类型不对,我知道那里错了,因为数据为空,可是我还是需要判断的键入值。请问一下怎么改.
2.如图,我想图上的下拉菜单的改变以后,程序可以记住我的设置 展开
5个回答
展开全部
问题1:
procedure TFrmMain.Edit1Change(Sender: TObject);
begin
if trim(edit1.text)<>'' then
begin
MessageBox(Handle, '请输入数字,不能空白!', PChar('输入错误'), MB_OK + MB_ICONINFORMATION);
end;
if strtoint(edit1.text)>23 then
begin
MessageBox(Handle, '请输入小于24的数字', PChar('输入错误'), MB_OK + MB_ICONINFORMATION);
end;
end;
问题2:
假如你的5个COMBOBOX 的name从上到下依次为combobox1,combobox2,combobox3,combobox4,combobox5,相应的窗体名和LABEL名按照你自己的改,你只要看事件里的代码就行,当然5个CHANGE事件可以优化,比如你可把第一个COMBOBX1的CHANGE事件的《ComboBox1Change》复制到其它4个对应的CHANGE 事件里,单元代码为:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,inifiles;//-----------------这里要使用infiles
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
ComboBox5: TComboBox;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
procedure ComboBox5Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
myinifile:Tinifile;
filename:string;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin//读取以前的设置
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);
combobox1.Text:=myinifile.ReadString('波特率','combobox1',combobox1.Text);
combobox2.Text:=myinifile.ReadString('校验位','combobox2',combobox2.Text);
combobox3.Text:=myinifile.ReadString('数据位','combobox3',combobox3.Text);
combobox4.Text:=myinifile.ReadString('停止位','combobox4',combobox4.Text);
combobox5.Text:=myinifile.ReadString('流控制','combobox5',combobox5.Text);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
procedure TForm1.ComboBox3Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
procedure TForm1.ComboBox4Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
procedure TForm1.ComboBox5Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
end.
procedure TFrmMain.Edit1Change(Sender: TObject);
begin
if trim(edit1.text)<>'' then
begin
MessageBox(Handle, '请输入数字,不能空白!', PChar('输入错误'), MB_OK + MB_ICONINFORMATION);
end;
if strtoint(edit1.text)>23 then
begin
MessageBox(Handle, '请输入小于24的数字', PChar('输入错误'), MB_OK + MB_ICONINFORMATION);
end;
end;
问题2:
假如你的5个COMBOBOX 的name从上到下依次为combobox1,combobox2,combobox3,combobox4,combobox5,相应的窗体名和LABEL名按照你自己的改,你只要看事件里的代码就行,当然5个CHANGE事件可以优化,比如你可把第一个COMBOBX1的CHANGE事件的《ComboBox1Change》复制到其它4个对应的CHANGE 事件里,单元代码为:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,inifiles;//-----------------这里要使用infiles
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
ComboBox5: TComboBox;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
procedure ComboBox5Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
myinifile:Tinifile;
filename:string;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin//读取以前的设置
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);
combobox1.Text:=myinifile.ReadString('波特率','combobox1',combobox1.Text);
combobox2.Text:=myinifile.ReadString('校验位','combobox2',combobox2.Text);
combobox3.Text:=myinifile.ReadString('数据位','combobox3',combobox3.Text);
combobox4.Text:=myinifile.ReadString('停止位','combobox4',combobox4.Text);
combobox5.Text:=myinifile.ReadString('流控制','combobox5',combobox5.Text);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
procedure TForm1.ComboBox3Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
procedure TForm1.ComboBox4Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
procedure TForm1.ComboBox5Change(Sender: TObject);
begin//改变设置时,将设置写入''基本设置.INI文件''
filename:=ExtractFilePath(paramstr(0))+'基本设置.ini';
myinifile:=Tinifile.Create(filename);//如果没有‘基本设置.ini’文件就创建一个。
myinifile.WriteString('波特率','combobox1',combobox1.Text);
myinifile.WriteString('校验位','combobox2',combobox2.Text);
myinifile.WriteString('数据位','combobox3',combobox3.Text);
myinifile.WriteString('停止位','combobox4',combobox4.Text);
myinifile.WriteString('流控制','combobox5',combobox5.Text);
myinifile.Free;
end;
end.
展开全部
1 if (edit1.Text<>'') and (strtoint(edt1.text)>23) then
MessageBox(Handle, '请输入小于24的数字', PChar('输入错误'), MB_OK + MB_ICONINFORMATION);
2 建议把改变后的值保存到本地的.INI文件里,然后程序初始化的时候就从.ini里读 ;也可以向楼上的说保存到数据库,每次从数据库读取出这些值,但太麻烦了,而且程序效率不是很高,毕竟连到数据库去;如果像这样的设置很多,非要用数据表保存的话用也用本地数据表,像用TClientDataSet这些控件来读取数据,或来存储数据,关于这方面的知识在网上搜一下就大把了!在这里就不说了
MessageBox(Handle, '请输入小于24的数字', PChar('输入错误'), MB_OK + MB_ICONINFORMATION);
2 建议把改变后的值保存到本地的.INI文件里,然后程序初始化的时候就从.ini里读 ;也可以向楼上的说保存到数据库,每次从数据库读取出这些值,但太麻烦了,而且程序效率不是很高,毕竟连到数据库去;如果像这样的设置很多,非要用数据表保存的话用也用本地数据表,像用TClientDataSet这些控件来读取数据,或来存储数据,关于这方面的知识在网上搜一下就大把了!在这里就不说了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、OnChang不是说在你键入的时候才触发,而是里面的内容一旦变化就触发。
包括删除,清空的时候
当清空的时候Edit1的内容不是nil而是 ‘’,这转变成int肯定是比较不了的
在if strtoint(edit1.text)>23 then前加下面一句就可以了
if Length(Trim(Edit1.Text)) = 0 then Exit ; //Trim(String)为去掉String中的空
//格,Length为统计String的长度
2、若想一直记住这些值,大不了就是为它建一张数据表,需要这些设置时,从数据库读取出这些值。改变时再Update这张表对应的字段值。
{----纯手打。望结贴---}
包括删除,清空的时候
当清空的时候Edit1的内容不是nil而是 ‘’,这转变成int肯定是比较不了的
在if strtoint(edit1.text)>23 then前加下面一句就可以了
if Length(Trim(Edit1.Text)) = 0 then Exit ; //Trim(String)为去掉String中的空
//格,Length为统计String的长度
2、若想一直记住这些值,大不了就是为它建一张数据表,需要这些设置时,从数据库读取出这些值。改变时再Update这张表对应的字段值。
{----纯手打。望结贴---}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1 :你可以写if edit1<>'' then 就是如果edit1不为空的时候进行判断。。
2:你可以存在ini文件或者数据库中。每次窗口出来的时候进行调用
2:你可以存在ini文件或者数据库中。每次窗口出来的时候进行调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在KeyPress事件中处理
这是处理只能为数字情况
if key<>#8 then
begin
if(key<'0') or (key >'9') then
begin
key :=#0;
showmessage('只能输入数字');
end;
end;
这是处理只能为字母情况
if key<>#8 then
begin
if not(((key<='z') and (key>='a')) or ((key<='Z') and (key>='A'))) then
begin
key :=#0;
showmessage('只能输入字母');
end;
end;
请参考
这是处理只能为数字情况
if key<>#8 then
begin
if(key<'0') or (key >'9') then
begin
key :=#0;
showmessage('只能输入数字');
end;
end;
这是处理只能为字母情况
if key<>#8 then
begin
if not(((key<='z') and (key>='a')) or ((key<='Z') and (key>='A'))) then
begin
key :=#0;
showmessage('只能输入字母');
end;
end;
请参考
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询