谢谢e-,得到提示,自己解决.
谢谢所有的人,谢谢大家的帮助.
我写的代码如下,见笑了.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, ImgList, ComCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
ListBox1: TListBox;
ListBox2: TListBox;
StatusBar1: TStatusBar;
Button4: TButton;
ListBox3: TListBox;
procedure ListBox1Click(Sender: TObject);
procedure ListBox2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
X1:Integer; //listbox1选中的行数
X2:Integer; //listbox2选中的行数
AllLinkTag : array of string; //定义动态数组,全局标志位,用于判断是否连接
SelectedItems: array[1..50,0..1] of string; //用于保存连线两边的listbox1和listbox2的值
implementation
{$R *.dfm}
procedure TForm1.ListBox1Click(Sender: TObject);
begin
X1 := ListBox1.ItemIndex+1;
end;
procedure TForm1.ListBox2Click(Sender: TObject);
var
X:Integer;
Y:Integer;
L:Integer;
begin
X2 := ListBox2.ItemIndex+1;
if (AllLinkTag[X2] = 'UnLink') then
begin
X := Image1.Width;
Y := ListBox2.ItemHeight*X2;
L := ListBox1.ItemHeight*(X1);
Image1.Canvas.Pen.Mode := pmNotXor; //
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Pen.Width := 2;
Image1.Canvas.MoveTo(0,L);
Image1.Canvas.LineTo(X,Y);
AllLinkTag[X2] := 'Link';
SelectedItems[X2,0] := ListBox1.Items[ListBox1.itemindex];
SelectedItems[X2,1] := ListBox2.Items[ListBox2.itemindex];
Exit;
end;
if (AllLinkTag[X2] = 'Link') then
begin
X := Image1.Width;
Y := ListBox2.ItemHeight*X2;
L := ListBox1.ItemHeight*(X1);
Image1.Canvas.Pen.Mode := pmNotXor; //
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Pen.Width := 2;
Image1.Canvas.MoveTo(0,L);
Image1.Canvas.LineTo(X,Y);
AllLinkTag[X2] := 'UnLink';
SelectedItems[X2,0] := '';
SelectedItems[X2,1] := '';
Exit;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
I : Integer;
begin
SetLength (AllLinkTag, 50); //分配内存
for I := 0 to 49 do
AllLinkTag := 'UnLink';
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i:Integer;
begin
ListBox3.Items.Clear;
for i := 1 to 49 do
if (SelectedItems[i,0]<>'') and (SelectedItems[i,1]<>'') then
ListBox3.Items.Add(SelectedItems[i,0]+SelectedItems[i,1]);
end;
end.
但现在还有一个问题:
我不想出现"一对多"的情况.
即:若listbox2中的一项选择后,该项便不能在和listbox1中的连线.
试了较多的方法,考虑了设全局变量,做标记位的方法.但效果不理想.
望各位讨论讨论!!