大虾们快来啊,菜鸟有事相求! 好,我想建个通讯录,不用数据库,有一个listbox,三个edit(name,address,telephone),还有添加,输入,修改,删除,保存这个按钮,当输入完,按添加,则将name加到listbox中,加入几个后,点保存,能存在listbox中,想查看时,单击listbox 则在edit中显示name,address,telephone,请问大虾们怎么能实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考《Delphi 5 开发人员指南》中有关文件操作的那一章,上面的例子,你只要一比一的修改一下就能满足你的需求!!! 也可以啊,听说有个Tlist的类,好像是动态存储的,不知道行不 不用了,写好了unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;type TFormStatus = (fsNormal, fsAdd, fsEdit); TMyAddrBookItem = record Name :string; Address :string; TeleNum :string; end; PMyAddrBookItem = ^TMyAddrBookItem; TForm1 = class(TForm) Panel1: TPanel; pnlListBox: TPanel; Label1: TLabel; Label2: TLabel; lbxNames: TListBox; pnlData: TPanel; pnlButtons: TPanel; Label3: TLabel; Label4: TLabel; Label5: TLabel; edtName: TEdit; edtTelephone: TEdit; btnAdd: TButton; btnSave: TButton; btnEdit: TButton; btnDelete: TButton; btnCancel: TButton; edtAddress: TEdit; procedure btnAddClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure lbxNamesClick(Sender: TObject); procedure btnEditClick(Sender: TObject); procedure btnSaveClick(Sender: TObject); procedure btnCancelClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private { Private declarations } FStatus :TFormStatus; FDataList :TList; function HasRecord :Boolean; function IsModifyMode :Boolean; procedure SetBtnStatus; procedure SetCtrlStatus; procedure ClearData; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnAddClick(Sender: TObject);begin FStatus := fsAdd; SetBtnStatus; ClearData; edtName.SetFocus;end;procedure TForm1.btnDeleteClick(Sender: TObject);var index :Integer; rec :PMyAddrBookItem;begin index := lbxNames.ItemIndex; rec := PMyAddrBookItem(FDataList.Items[index]); FDataList.Delete(index); lbxNames.DeleteSelected; Dispose(rec); if index = lbxNames.Count then lbxNames.ItemIndex := index - 1 else lbxNames.ItemIndex := index; if HasRecord then lbxNamesClick(nil) else ClearData; SetBtnStatus;end;procedure TForm1.ClearData;begin edtName.Text := ''; edtTelephone.Text := ''; edtAddress.Text := '';end;procedure TForm1.FormCreate(Sender: TObject);begin FDataList := TList.Create;end;function TForm1.HasRecord: Boolean;begin Result := (lbxNames.ItemIndex >= 0);end;function TForm1.IsModifyMode: Boolean;begin Result := (FStatus <> fsNormal);end;procedure TForm1.lbxNamesClick(Sender: TObject);var rec :PMyAddrBookItem;begin if not HasRecord then Exit; rec := PMyAddrBookItem(FDataList.Items[lbxNames.ItemIndex]); edtName.Text := rec.Name; edtTelephone.Text := rec.TeleNum; edtAddress.Text := rec.Address; SetBtnStatus;end;procedure TForm1.SetBtnStatus;begin btnEdit.Enabled := (not IsModifyMode) and HasRecord; btnAdd.Enabled := not IsModifyMode; btnSave.Enabled := IsModifyMode; btnCancel.Enabled := IsModifyMode; btnDelete.Enabled := (not IsModifyMode) and HasRecord; SetCtrlStatus;end;procedure TForm1.SetCtrlStatus;var i :Integer;begin lbxNames.Enabled := not IsModifyMode; with pnlData do begin for i:=0 to ControlCount - 1 do Controls[i].Enabled := IsModifyMode; end;end;procedure TForm1.btnEditClick(Sender: TObject);begin FStatus := fsEdit; SetBtnStatus; edtName.SetFocus; edtName.SelectAll;end;procedure TForm1.btnSaveClick(Sender: TObject);var rec :PMyAddrBookItem;begin if FStatus = fsAdd then begin New(rec); rec.Name := edtName.Text; rec.Address := edtAddress.Text; rec.TeleNum := edtTelephone.Text; FDataList.Add(rec); lbxNames.AddItem(rec.Name, nil); lbxNames.ItemIndex := lbxNames.Count - 1; end else begin rec := PMyAddrBookItem(FDataList.Items[lbxNames.ItemIndex]); rec.Name := edtName.Text; rec.Address := edtAddress.Text; rec.TeleNum := edtTelephone.Text; end; FStatus := fsNormal; SetBtnStatus;end;procedure TForm1.btnCancelClick(Sender: TObject);begin lbxNamesClick(nil); FStatus := fsNormal; SetBtnStatus;end;procedure TForm1.FormShow(Sender: TObject);begin SetBtnStatus;end;procedure TForm1.FormDestroy(Sender: TObject);var rec :PMyAddrBookItem;begin while FDataList.Count > 0 do begin rec := FDataList.Items[0]; Dispose(rec); FDataList.Delete(0); end; FDataList.Free;end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin if IsModifyMode then begin ShowMessage('您已经修改了记录,请保存或取消后再退出'); CanClose := false; Exit; end; CanClose := true;end;end. delphi6必须要装打印机才能使用Qreport吗? 获得取得网页框架的函数怎么不能通过呢? 关于页面打印得问题,帮忙解决! 求fastreport2.52中文版 线程、创建视图、进度条 用ADO连接DBF文件时,假如字段名为中文或字段值为中文会显示乱码,请问怎样解决? 再送100分,有空就来接分啦 数组转换为集合(有没直接的函数) 在广州的朋友如果你有时间而且想用DELPHI写软件兼职可以联系我,QQ#373843,[email protected] Delphi容错机制try简单问题 在一个HTM文件中如何删除多余的代码?在线等 关于dbgridEh的标题问题,实在是搞不定了
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;type
TFormStatus = (fsNormal, fsAdd, fsEdit); TMyAddrBookItem = record
Name :string;
Address :string;
TeleNum :string;
end;
PMyAddrBookItem = ^TMyAddrBookItem; TForm1 = class(TForm)
Panel1: TPanel;
pnlListBox: TPanel;
Label1: TLabel;
Label2: TLabel;
lbxNames: TListBox;
pnlData: TPanel;
pnlButtons: TPanel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
edtName: TEdit;
edtTelephone: TEdit;
btnAdd: TButton;
btnSave: TButton;
btnEdit: TButton;
btnDelete: TButton;
btnCancel: TButton;
edtAddress: TEdit;
procedure btnAddClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure lbxNamesClick(Sender: TObject);
procedure btnEditClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
FStatus :TFormStatus;
FDataList :TList; function HasRecord :Boolean;
function IsModifyMode :Boolean;
procedure SetBtnStatus;
procedure SetCtrlStatus; procedure ClearData;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnAddClick(Sender: TObject);
begin
FStatus := fsAdd;
SetBtnStatus;
ClearData; edtName.SetFocus;
end;procedure TForm1.btnDeleteClick(Sender: TObject);
var
index :Integer;
rec :PMyAddrBookItem;
begin
index := lbxNames.ItemIndex; rec := PMyAddrBookItem(FDataList.Items[index]); FDataList.Delete(index);
lbxNames.DeleteSelected;
Dispose(rec); if index = lbxNames.Count then
lbxNames.ItemIndex := index - 1
else
lbxNames.ItemIndex := index; if HasRecord then
lbxNamesClick(nil)
else
ClearData;
SetBtnStatus;
end;procedure TForm1.ClearData;
begin
edtName.Text := '';
edtTelephone.Text := '';
edtAddress.Text := '';
end;procedure TForm1.FormCreate(Sender: TObject);
begin
FDataList := TList.Create;
end;function TForm1.HasRecord: Boolean;
begin
Result := (lbxNames.ItemIndex >= 0);
end;function TForm1.IsModifyMode: Boolean;
begin
Result := (FStatus <> fsNormal);
end;procedure TForm1.lbxNamesClick(Sender: TObject);
var
rec :PMyAddrBookItem;
begin
if not HasRecord then
Exit; rec := PMyAddrBookItem(FDataList.Items[lbxNames.ItemIndex]); edtName.Text := rec.Name;
edtTelephone.Text := rec.TeleNum;
edtAddress.Text := rec.Address; SetBtnStatus;
end;procedure TForm1.SetBtnStatus;
begin
btnEdit.Enabled := (not IsModifyMode) and HasRecord;
btnAdd.Enabled := not IsModifyMode;
btnSave.Enabled := IsModifyMode;
btnCancel.Enabled := IsModifyMode;
btnDelete.Enabled := (not IsModifyMode) and HasRecord; SetCtrlStatus;
end;procedure TForm1.SetCtrlStatus;
var
i :Integer;
begin
lbxNames.Enabled := not IsModifyMode;
with pnlData do
begin
for i:=0 to ControlCount - 1 do
Controls[i].Enabled := IsModifyMode;
end;
end;procedure TForm1.btnEditClick(Sender: TObject);
begin
FStatus := fsEdit;
SetBtnStatus;
edtName.SetFocus;
edtName.SelectAll;
end;procedure TForm1.btnSaveClick(Sender: TObject);
var
rec :PMyAddrBookItem;
begin
if FStatus = fsAdd then
begin
New(rec);
rec.Name := edtName.Text;
rec.Address := edtAddress.Text;
rec.TeleNum := edtTelephone.Text; FDataList.Add(rec);
lbxNames.AddItem(rec.Name, nil);
lbxNames.ItemIndex := lbxNames.Count - 1;
end
else
begin
rec := PMyAddrBookItem(FDataList.Items[lbxNames.ItemIndex]);
rec.Name := edtName.Text;
rec.Address := edtAddress.Text;
rec.TeleNum := edtTelephone.Text;
end;
FStatus := fsNormal;
SetBtnStatus;
end;procedure TForm1.btnCancelClick(Sender: TObject);
begin
lbxNamesClick(nil);
FStatus := fsNormal;
SetBtnStatus;
end;procedure TForm1.FormShow(Sender: TObject);
begin
SetBtnStatus;
end;procedure TForm1.FormDestroy(Sender: TObject);
var
rec :PMyAddrBookItem;
begin
while FDataList.Count > 0 do
begin
rec := FDataList.Items[0];
Dispose(rec);
FDataList.Delete(0);
end; FDataList.Free;
end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if IsModifyMode then
begin
ShowMessage('您已经修改了记录,请保存或取消后再退出');
CanClose := false;
Exit;
end;
CanClose := true;
end;end.