有人在使用cxButtoneditk吗?这段代码结果为什么不对啊?在线等(200)

  • 主题发起人 主题发起人 ypluo
  • 开始时间 开始时间
Y

ypluo

Unregistered / Unconfirmed
GUEST, unregistred user!
我在cxButtonedit里定义了三个事件:onkeydown onPropertiesbuttonclick onPropertiesValidate,我想在buttonedit里输入'1234',然后回车,运行了validate和buttonclick事件,然后buttonedit显示'abcd'.可是老是不行,还是显示'1234',不知道为什么啊.unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxButtonEdit;type TForm1 = class(TForm) cxButtonEdit1: TcxButtonEdit; cxButtonEdit2: TcxButtonEdit; procedure cxButtonEdit1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer); procedure cxButtonEdit1PropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean); procedure cxButtonEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.cxButtonEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin case key of VK_RETURN: begin key := 0; GetParentform(Self).perform(WM_NEXTDLGCTL,0,0); end; end;end;procedure TForm1.cxButtonEdit1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);begin TcxButtonEdit(Sender).Text:='abcd';end;procedure TForm1.cxButtonEdit1PropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);var i,j:Integer;begin TcxButtonEdit(Sender).Properties.OnButtonClick(Sender,1);end;
 
因为 PropertiesValidate 是用来判断输入文本是否有效的。procedure TForm1.cxButtonEdit1PropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);var i,j:Integer;begin TcxButtonEdit(Sender).Properties.OnButtonClick(Sender,1);//执行这里,TcxButtonEdit(Sender).Text 已经变成 'abcd' 了。 //但是本过程结束时因没有错误,所以文本又改回原输入的值。end;如果改为:procedure TForm1.cxButtonEdit1PropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);begin TcxButtonEdit(Sender).Properties.OnButtonClick(Sender,1); error:=true;//指示输入是错误的。end;结果就是你想要的。但会出现错误提示对话框(这可能又是你不想要的)。因此,你的思路是错误的。
 
PropertiesValidate只在核对输入内容时使用吗?
 
可是用onchange又有一个问题,就是后台改变值也会触发事件,我想只在手工输入内容时触发
 
to kaida:照理说validate:过程没错误就应该用新值啊,为什么不行呢?
 
procedure TForm1.cxButtonEdit1PropertiesValidate(Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);begin DisplayValue:='abcd';end;
 
调用 displaytext不错,马上试一下,如果可以,分全给你。
 
照理说validate:过程没错误就应该用新值啊,为什么不行呢?"没有错误"是指在Edit编辑框输入的文本没有错误,所以结果是输入的文本。
 
后退
顶部