一个关于listbox的简单的难题(100分)

  • 主题发起人 主题发起人 dreamplay
  • 开始时间 开始时间
D

dreamplay

Unregistered / Unconfirmed
GUEST, unregistred user!
我有两个listbox,要求点击按钮 > 从listbox1中的选项移动listbox2,当点击按钮 < 时,
listbox2中的选项移动到listbox1,并且保持该选项原来在listbox1中的位置不变,怎么办?
如果能进行多项选择更好!!问题很集,请各路朋友不吝指教!!!
 
在delphi菜单中点击File...New...Other...
选择Forms中的Dual List box就是你要的东东。
 
// 下面的代码可以实现你的要求。

procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
begin
for I := 0 to ListBox1.Items.Count - 1 do
if ListBox1.Selected then
ListBox2.Items.Add(ListBox1.Items.Strings);

I := 0;
while I < ListBox1.Items.Count do
if ListBox1.Selected then
ListBox1.Items.Delete(I)
else
Inc(I);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Sorted := True;
ListBox1.MultiSelect := True;

ListBox2.Sorted := True;
ListBox2.MultiSelect := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
I : Integer;
begin
for I := 0 to ListBox2.Items.Count - 1 do
if ListBox2.Selected then
ListBox1.Items.Add(ListBox2.Items.Strings);

I := 0;
while I < ListBox2.Items.Count do
if ListBox2.Selected then
ListBox2.Items.Delete(I)
else
Inc(I);
end;
 
对listbox1进行排序,就可使listbox1中的位置不变.
 
多谢三位朋友的指点,我现在的问题是我不是按字母排序,我要按我的数据库中的字段顺序
进行排列,所以要求
ListBox1.MultiSelect := false,有什么办法么?谢谢
 
原理相似,你改改即可
你可以按数据库的index来排序,每一次点击,就刷新一次不行吗
 
还要注意,如果listbox中已经没有item了.
仍然删除,会出索引的问题.
最好先判断一下
 
你可以先获得字段的index后再插入即可.
获取字段在表中的index可以由fieldname来判断,用一个循环来实现即可.
for i:=0 to (table.fieldcount-1) do
begin
if Listbox.items.Strings[n]=table.fields.fieldname then
begin
index:=i;
exit;
end;
end;
 
将两个listbox的multiselect设成true;
var i:integer;
count:integer;
begin
if listbox1.items.count>=listbox2.items.count then count:=listbox2.count
else count:=listbox1.items.count;
for i:=0 to count-1 do
begin
listbox2.selected:=false;
if listbox1.Selected=true then
listbox2.Selected:=true;end;
listbox2.setfocus;
 
后退
顶部