if not Assigned(TreeView1.Selected) then Exit;

解决方案 »

  1.   

    如果你的TreeView没有选中的接点
    那么TreeView1.Selected就会为nil
    Assigned():判断变量是否分配资源如果你操作空指针当然会出错
      

  2.   

    这是我的哪个程序的两个过程,一个是FormCreate(),一个是ReadNameToTreeview(), 但是我用procedure TMainForm.FormCreate(Sender: TObject);
    Var
       FName,sex,path,SourceStr:string;
    begin
         SourceStr := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\delphi\work\通讯录\add.mdb;Persist Security Info=False';
         ADOTable1.ConnectionString:=SourceStr;
         ADOTable1.Active :=True;
         with ADOTable1 do begin
           First;
           while not ADOTable1.Eof do begin
              FName:=ADOTable1.FieldByName('name').AsString;
              Sex  :=ADOTable1.FieldByName('sex').AsString;
              ReadNameToTreeview(FName,sex);
              Next;
           end;
           TreeView1.Items[0].Selected:=true;
           TreeView1Click(nil);
         end;
         path:=ExTractFilePath(Application.ExeName);
         IniFile:=Tinifile.Create(path+'SystemSet.ini');
    end;
    procedure TMainForm.ReadNameToTreeview(FName:String;Sex:String);begin
       Node:=TreeView1.Selected;
       TreeView1.Items.Add(Node,FName);
       if Sex='男' then
         Node.ImageIndex:=5
       else
         Node.ImageIndex:=6;
    end;
      

  3.   

    procedure TMainForm.ReadNameToTreeview(mName: string; mSex: string);
    begin
      with TreeView1.Items.Add(TreeView1.TopItem, mName) do
        ImageIndex := StrToIntDef(StringReplace('&' + mSex, '&男', '5', []), 6);
    end;
      

  4.   

    StringReplace这个函数我在帮助里看了半天,还是有点糊涂。
    不过现在到可以了,很感谢你,不过希望你讲讲这个函数吧,谢谢了。(当然分肯定是要给的了)
      

  5.   

    你可以在简单加个条件判断啊:
       if node<>nil
      

  6.   

    //from
    http://kingron.myetang.com/zsdoc02.txt━━━━━━━━━━━━━━━━━━━━━
    首部  function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string; $[SysUtils.pas
    功能  返回替换后的字符串
    说明  rfReplaceAll为替换全部内容;rfIgnoreCase为忽略大小写
    参考  function SysUtils.AnsiUpperCase;function SysUtils.AnsiPos;function System.Copy
    例子
    ///////Begin StringReplace
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.Lines.Values['[]'] :=
        StringReplace(Edit1.Text, Edit2.Text, Edit3.Text, []);
      Memo1.Lines.Values['[rfReplaceAll]'] :=
        StringReplace(Edit1.Text, Edit2.Text, Edit3.Text, [rfReplaceAll]);
      Memo1.Lines.Values['[rfIgnoreCase]'] :=
        StringReplace(Edit1.Text, Edit2.Text, Edit3.Text, [rfIgnoreCase]);
      Memo1.Lines.Values['[rfReplaceAll, rfIgnoreCase]'] :=
        StringReplace(Edit1.Text, Edit2.Text, Edit3.Text, [rfReplaceAll, rfIgnoreCase]);
    end;
    ///////End StringReplace
    ━━━━━━━━━━━━━━━━━━━━━
      

  7.   

    ImageIndex := StrToIntDef(StringReplace('&' + mSex, '&男', '5', []), 6);//就看成if mSex = '男' then
      ImageIndex := 5
    else ImageIndex := 6;嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
    嘻嘻嘻我是没事写着玩嘻嘻嘻嘻
    嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻