---------------------------------------------------------------------------------------
type
  TUserLogin = class(Tcomponent)
  private
    FDataName:String;//数据库名
    Function FindFileName:String;//数据库路径查找
  published
    Property DataName:String read FindFileName write FDataName;
  end;
-----------------------------------------------------------------------------------------
function TUserLogin.FindFileName: String;
var
    OpenFile:TOpenDialog;
begin
    OpenFile:=TOpenDialog.Create(nil);
    try
        OpenFile.Filter:='*.*|*.mdb';
        OpenFile.DefaultExt:='mdb';
        OpenFile.InitialDir:=ExtractFilePath(Application.ExeName);
        OpenFile.Title:='请选择数据';
        if OpenFile.Execute then
            Result:=OpenFile.FileName;
    finally
        OpenFile.Free;
    end;
end;
---------------------------------------------------------------------------------------
我的目的:
    通过FindFileName获得所选数据库名的路径及文件名,并显示在属性FDataName中,如果没有选择,则不执行FindFileName方法
---------------------------------------------------------------------------------------
出错情况:
    当我的鼠标出现在object Inspector上时,就出现执行FindFileName代码,但我这个时间不需要执行这个方法,要在点击属性FDataName时才,才执行这个方法。
----------------------------------------------------------------------------------------
求救:
    请哪位大侠给个提示,看看我的错误到底出在哪里,如有源码更好,谢谢!

解决方案 »

  1.   

    结构错误
    你所得的结果是必然的属性自动读写的http://lysoft.7u7.net
      

  2.   

    没看懂出错情况,但我试了一下你的代码应该是可以的,要不试试这个function TUserLogin.FindFileName: String;
    var
        OpenFile:TOpenDialog;
    begin
        OpenFile:=TOpenDialog.Create(nil);
        try
            OpenFile.Filter:='mdb文件|*.mdb';
            OpenFile.DefaultExt:='mdb';
            OpenFile.InitialDir:=ExtractFilePath(Application.ExeName);
            OpenFile.Title:='请选择数据';
            if OpenFile.Execute then
                Result:=OpenFile.FileName
            else Result:='';
        finally
            OpenFile.Free;
        end;
    end;另外我很奇怪的是你为什么要自己创建而不用现成的opendialog控件呢
      

  3.   

    没看懂出错情况,但我试了一下你的代码应该是可以的,要不试试这个function TUserLogin.FindFileName: String;
    var
        OpenFile:TOpenDialog;
    begin
        OpenFile:=TOpenDialog.Create(nil);
        try
            OpenFile.Filter:='mdb文件|*.mdb';
            OpenFile.DefaultExt:='mdb';
            OpenFile.InitialDir:=ExtractFilePath(Application.ExeName);
            OpenFile.Title:='请选择数据';
            if OpenFile.Execute then
                Result:=OpenFile.FileName
            else Result:='';
        finally
            OpenFile.Free;
        end;
    end;另外我很奇怪的是你为什么要自己创建而不用现成的opendialog控件呢
      

  4.   

    写成
    property DataName: string read FDataName write FDataName;
    公布读函数
      

  5.   

    public
      Function FindFileName:String;//数据库路径查找
      

  6.   

    看在你不怕笑的份上type
      TUserLogin = class(Tcomponent)
      private
        FDataName:String;//数据库名
        procedure SetFileName(value:String);//数据库路径查找
      published
        Property DataName:String read FDataName write SetFileName;
      end;procedure TUserLogin.SetFileName(value:String);//数据库路径查找
    var
        OpenFile:TOpenDialog;
    begin
        OpenFile:=TOpenDialog.Create(nil);
        try
            OpenFile.Filter:='mdb文件|*.mdb';
            OpenFile.DefaultExt:='mdb';
            OpenFile.InitialDir:=ExtractFilePath(Application.ExeName);
            OpenFile.Title:='请选择数据';
            if OpenFile.Execute then
                FDataName:=OpenFile.FileName
            else FDataName:='';
        finally
            OpenFile.Free;
        end;
    end;因为FDataName是string类型,所以只有当年改动那个值时才会出现对话框。最好是用自己的类型,注册自己的编辑器,用起来自然一些。
      

  7.   

    支持者 ppayun(~云彩),要讀取值來設置過程。