给基类窗体添加属性,我的属性值就是写不进去。(100分)

  • 主题发起人 主题发起人 getchar
  • 开始时间 开始时间
G

getchar

Unregistered / Unconfirmed
GUEST, unregistred user!
基础类:TBaseForm
......
private
FEmpCode: string; //员工编码
FEmpName: string; //员工姓名
FUserName: string; //登录帐号
FUserPwd: string; //登陆密码
FDptCode: string; //部门编号
FDptName: string; //部门名称
protected
procedure SetEmpCode(EmpCode: string);
procedure SetEmpName(EmpName: string);
procedure SetUserName(UserName: string);
procedure SetUserPwd(UserPwd: string);
procedure SetDptCode(DptCode: string);
procedure SetDptName(DptName: string);
published
property EmpCode:string read FEmpCode write SetEmpCode; //员工编码
property EmpName:string read FEmpName write SetEmpName; //员工姓名
property UserName:string read FUserName write SetUserName; //登录帐号
property UserPwd:string read FUserPwd write SetUserPwd; //登陆密码
property DptCode:string read FDptCode write SetDptCode; //部门编号
property DptName:string read FDptName write SetDptName; //部门名称
var
BaseForm: TBaseForm;
implementation
{$R *.dfm}

procedure TBaseForm.SetEmpCode(EmpCode: string);
begin
Self.FEmpCode := EmpCode;
end;

procedure TBaseForm.SetEmpName(EmpName: string);
begin
Self.FEmpName := EmpName;
end;

procedure TBaseForm.SetUserName(UserName: string);
begin
Self.FUserName := UserName;
end;

procedure TBaseForm.SetUserPwd(UserPwd: string);
begin
Self.FUserPwd := UserPwd;
end;

procedure TBaseForm.SetDptCode(DptCode: string);
begin
Self.FDptCode := DptCode;
end;

procedure TBaseForm.SetDptName(DptName: string);
begin
Self.FDptName := DptName;
end;

TLoginForm从继承TBaseForm继承过来的,在登陆的事件里写如下代码:
正常登陆,但是属性值没写进去。
procedure TLoginForm.btnLoginClick(Sender: TObject);
begin
Qry.Close;
Qry.SQL.Text :=
'select E.emp_code, E.user_name, E.emp_name, E.emp_pwd, '+
'D.dpt_code, D.dpt_name '+
'from tbl_emp_info E '+
'left join tbl_dpt_info D on upper(E.dpt_id)=upper(D.id) '+
'where E.user_name = '''+Trim(edtUser.Text)+''' and '+
'E.emp_pwd = '''+EntryStr(edtPwd.Text)+''' ';
Qry.Prepared;
Qry.Open;
if Qry.RecordCount = 1 then
begin
SetEmpCode(Qry.FieldByName('emp_code').AsString);
SetEmpName(Qry.FieldByName('emp_name').AsString);
SetUserName(Qry.FieldByName('user_name').AsString);
SetUserPwd(Qry.FieldByName('emp_pwd').AsString);
SetDptCode(Qry.FieldByName('dpt_code').AsString);
SetDptName(Qry.FieldByName('dpt_name').AsString);
end;
end;
 
看代码没什么问题。请把dfm流写出来看看

1、另外跟踪以下看看
2、你是如果判定 "但是属性值没写进去"的?
 
1.跟踪了,代码都执行了。
2.我在MainFrom(也是从TBaseForm继承的)里放了个button,在登陆后ShowMessage(Self.EmpName) ...所有的属性都showmessage了,所有的属性都没值。
 
constructor Create(AOwner: TComponent); override;

........
constructor TBaseForm.Create(AOwner: TComponent);
begin
inherited;
SetEmpCode('');
SetEmpName('');
SetUserName('');
SetUserPwd('');
SetDptCode('');
SetDptName('');
end;
 
楼主对inherited理解不够!
ShowMessage(Self.EmpName);---只能在TfrmLogin里正确运行
对于其他的继承类不可能有值!!!!!!!!
这是两个不同实例!
a = inherited TBaseForm;
b = inherited TBaseForm;
a是a,b是b,怎么能混用呢?
所以你只能
ShowMessage(frmLogin.EmpName)
 
回楼上的,既然EmpName是TBaseForm的属性,
那么我的MainForm是从TBaseForm继承过来的,
那么EmpName同样也是MainForm的属性啊,
不知道这样的理解正确否?
 
注意二个不同的实例.
楼主混淆了类与实例间的关系了.
 
我就纳闷了
既然使用了属性
为什么赋值的时候还直接使用SetEmpCode之类的方法呢?
 
赋值用方法是有其它用处,比如属性值改变以后做其它操作,直接赋值就做不了了
 
后退
顶部