DragDrop事件无法触发是怎么回事啊?(50分)

  • 主题发起人 主题发起人 xiaolin317
  • 开始时间 开始时间
X

xiaolin317

Unregistered / Unconfirmed
GUEST, unregistred user!
写了一个小东西,把listbox中的内容拖动到checklistbox中,或者把checklistbox中的内容拖动到listbox中。可DragDrop事件怎么样也触发不了是怎么回事呀?
下面是源码:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, CheckLst;

type
TForm1 = class(TForm)
ListBox1: TListBox;
CheckListBox1: TCheckListBox;
Edit1: TEdit;
Button1: TButton;
procedure ListBox1DragOver(Sender, Source: TObject;
X, Y: Integer;
State: TDragState;
var Accept: Boolean);
procedure ListBox1DragDrop(Sender, Source: TObject;
X,
Y: Integer);
procedure CheckListBox1DragDrop(Sender, Source: TObject;
X,
Y: Integer);
function addnotdup(list:Tcustomlistbox;text:string):boolean;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.addnotdup(list:Tcustomlistbox;text:string):boolean;
begin

result:=list.items.indexof(text)<0;
if result then

list.items.add(text);
end;


procedure TForm1.ListBox1DragOver(Sender, Source: TObject;
X, Y: Integer;
State: TDragState;
var Accept: Boolean);
begin

accept:=true;
if (source=edit1) and ((sender as tcustomListBox).items.IndexOf (edit1.text)>=0) then

accept:=false;
end;


procedure TForm1.ListBox1DragDrop(Sender, Source: TObject;
X,
Y: Integer);
var
i:integer;
begin

if source=edit1 then

listbox1.Items.Add(edit1.text)
else

if source=CheckListBox1 then
begin

for i:=CheckListBox1.Items.Count-1do
wnto 0do

if CheckListBox1.Checked then
begin

if addnotdup(listbox1,checklistbox1.Items) then

checklistbox1.Items.Delete(i);
end;

end;

end;


procedure TForm1.CheckListBox1DragDrop(Sender, Source: TObject;
X,
Y: Integer);
var
nItem:integer;
begin

if source=edit1 then

CheckListBox1.Items.Add(edit1.Text)
else

if source=listbox1 then
begin

nItem:=listbox1.ItemIndex;
if addnotdup(checklistbox1,listbox1.Items[nItem]) then

listbox1.Items.Delete(nitem);
end;

end;


procedure TForm1.Button1Click(Sender: TObject);
begin

CheckListBox1.Items.Add(edit1.Text);
ListBox1.Items.Add(edit1.Text);
end;


end.
 
是不是没有dragmode=dmAutomatic的原因啊
 
将listbox1和checklistbox1的dragmode设为dmAutomatic。
 
我是设置dmAutomatic的啊。没有用!
 
to xiaolin317:
我这里测试了,如果listbox1和checklistbox1的dragmode设为dmAutomatic,而且事件如你的代码所写:
1、listbox1->checklistbox1肯定没问题;
2、checklistbox1->listbox1必须选择一项在前面的checkbox中打勾后drag就行了(你的代码这样写的);
3、要实现edit1到listbox1、checklistbox1的drag必须edit的dragmode设为dmAutomatic;
4、你最好在listbox1、checklistbox1中各输几条项目试试;
5、完毕。
 
TYZhang
谢谢了,现在可以了。刚开始好像edit1没有设置dmAutomatic。
设置之后可是不可以输入了。郁闷!
 
后退
顶部