我做的控件为什么不能修改数据?(100分)

  • 主题发起人 主题发起人 zealots
  • 开始时间 开始时间
Z

zealots

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟要做一个继承TDBEdit的控件, 提供两个属性Maxvalues,Minvalues
让用户输入数值, 当控件的text值变化时,和Maxvalues,Minvalues比较,
并用不同的颜色表示。但是应用时当光标一离开该控件,数据却没了,这是怎么回事??
假如是事件 procedure Change(); override; 原因,
那怎么才能做到,当控件的text值变化时,颜色也变,还要能不丢失数据。
(当然不是要在TDBEdit里的OnChange事件控制)

 
是用 DELPHI 做的
 
你应该重载click事件,我们公司做的控件就是在这个事件里响应用户输入的数据
 
你给TDBEdit的Text付值是不对的,因为TDBEdit是数据控件,如果你的数据集没有值,
那么当你离开TDBEdit时,它的Text就会恢复为数据集的内容,所以,你应该给DataSet
控件的相关字段付值,至于付值的方法,既然你是继承的TDBEdit控件,那么可以参考
原有控件的写法,不是很难,自己找吧,这样会更有提高。
 
在TDBEdit原有的功能上,加一个功能,就是当输入值变化时,根据该值不同而用
不同的颜色显示!

to zhoujg
重载click事件是可以解决Text值复原的问题,但是它的颜色没有随Text值
变化而变化,而是在光标进入时才变,一般用TDBEdit来显示修改单条纪录时,改后就
直接保存退出,不会把光标每个TDBEdit历遍,所以更本达不到提示颜色作用。还不如
重载exit事件,不过好象不行,提示method 'OnExit' not found in base class错误。


to westboy2000
可能我没表达清楚,你没有弄明白我的意思,写这个控件就是要来显示修改单条纪录,
在控件的代码里没有给TDBEdit的Text付值,而是在模块编写时用到该控件显示修改纪录时,
改变text值,在离开时Text值复原。


问题虽然还没解决,还是谢谢两位!!


 
各位, 真的没办法吗?

该出手啦!!!!!!!
 
在onchange事件中这么写:(我试了可以)

if strtoint(text)>10 then
color:=clred;
inherited;
 
续:
你相应的改变一下条件就行了,不一定是>10,我是为了快呀
 
看来大家都不明白!!! 我要的是控件要拥有此功能(在TDBEdit原有的功能上加一个
功能: 随着用户输入值的变化而用不同的颜色表示), 而不需要用户自己在控件的
onchange 事件写代码,要不还要写这个控件干嘛?!!1

且看我的控件的源代码!! 各位不妨把控件加到delphi里试一试,

unit WarnDBEdit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ADODB,
StdCtrls, Mask, DBCtrls;

type
TWarnDBE = class(TDBEdit)
private
{ Private declarations }
FMYMax:real;
FMYMin:real;
protected
{ Protected declarations }
constructor create(AOwer: TComponent);override;
procedure Change(); override;
public
{ Public declarations }
published
{ Published declarations }
property MaxValues: real read FMYMax write FMYMax ;
property MinValues: real read FMYMin write FMYMin ;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Standard', [TWarnDBE]);
end;

constructor TWarnDBE.create(AOwer: TComponent);
begin
inherited;
end;

procedure TWarnDBE.Change();
var
values,max,min:real;
begin
self.Font.Color:=clWindowText;
try
if self.text='' then
values:=0
else
values:=strtofloat(self.text);

max:=self.MaxValues;
min:=self.MinValues;

if values > Max then
self.Font.Color:= clRed;

if values = Max then
self.Font.Color:= clMaroon;

if values < Min then
self.Font.Color:= clBlue;

if values = Min then
self.Font.Color:= clNavy;
except
end;
end;

end.
 
不都跟你说过了吗,onchange事件最后一行加上inherited;
 
对不起,是change事件最后一行加上inherited;

 
to Brave

谢谢!!!!!!!!!!!!!!!!!!!!!!!!
 
别可以,有问题找我
 
后退
顶部