我試圖通過點擊按鈕來向上或向下重新排列顯示給用戶的複選框。我可以讓複選框在每次點擊時成功進行,但問題在於,點擊按鈕後,選中的複選框會失去焦點。這樣做使我無法繼續點擊按鈕來上下移動複選標記框。我必須重新選中複選框才能繼續移動它。如何使用.Move()方法在TCheckListbox控件中選中選中的複選框。
每個按鈕點擊後,有人可以幫助我將注意力集中在複選框上嗎?
我的代碼
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CheckLst;
type
TForm1 = class(TForm)
CheckListBox1: TCheckListBox;
upButton: TButton;
downButton: TButton;
procedure FormCreate(Sender: TObject);
procedure upButtonClick(Sender: TObject);
procedure downButtonClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.downButtonClick(Sender: TObject);
var
i:Integer;
begin
i:=CheckListBox1.ItemIndex;
if(i<CheckListBox1.Count-1) Then
CheckListBox1.Items.Move(i,i+1);//Here
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CheckListBox1.Items.Add('One');
CheckListBox1.Items.Add('Two');
CheckListBox1.Items.Add('Three');
CheckListBox1.Items.Add('Four');
CheckListBox1.Items.Add('Five');
CheckListBox1.Items.Add('Six');
end;
procedure TForm1.upButtonClick(Sender: TObject);
var
i:Integer;
begin
i:=CheckListBox1.ItemIndex;
if(i>0) Then
CheckListBox1.Items.Move(i,i-1);//Here
end;
end.
該項目失去焦點('ItemIndex'被設置爲-1)最有可能,因爲該項目被刪除(和插入'TListBoxStrings'集合中的其他位置。移動項目後,至少可以手動將'ItemIndex'設置爲新索引(例如,當向下移動時,「CheckListBox1.ItemIndex:= i + 1;')。我不知道(也不相信)你可以以某種方式防止這種行爲。 – TLama 2014-11-23 01:52:35
雖然工作。謝謝你的回答。儘管它實際上失去了焦點,但它看起來像通過手動設置索引沒有丟失焦點。非常感謝。 – user3041882 2014-11-23 02:03:32