这是我的哪个程序的两个过程,一个是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;
procedure TMainForm.ReadNameToTreeview(mName: string; mSex: string); begin with TreeView1.Items.Add(TreeView1.TopItem, mName) do ImageIndex := StrToIntDef(StringReplace('&' + mSex, '&男', '5', []), 6); end;
那么TreeView1.Selected就会为nil
Assigned():判断变量是否分配资源如果你操作空指针当然会出错
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;
begin
with TreeView1.Items.Add(TreeView1.TopItem, mName) do
ImageIndex := StrToIntDef(StringReplace('&' + mSex, '&男', '5', []), 6);
end;
不过现在到可以了,很感谢你,不过希望你讲讲这个函数吧,谢谢了。(当然分肯定是要给的了)
if node<>nil
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
━━━━━━━━━━━━━━━━━━━━━
ImageIndex := 5
else ImageIndex := 6;嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻
嘻嘻嘻我是没事写着玩嘻嘻嘻嘻
嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻