VCL CheckListBox 传递选定的项目并将其删除
VCL CheckListBox pass selected Item and delete it
大家好,我是 Delphi 初学者,我有一个简单的问题,因为在网上为 Delphi 找东西似乎很难。
我有一个 CheckListBox,当我单击一个项目的复选框时,我想将它传递给另一个表单,假设创建了 form2。我有 2 个按钮:
删除 - 它应该删除选定的项目,以便生成表单的项目。如何删除选中的项目?
编辑条目 - 我需要将选中的项目值传递到另一个表单,我可以在其中编辑值并将其另存为新表单。如何将所选项目的值传递到另一个表单?
Ty 褪色。
这是一个更好的方法:
创建一个新的 VCL 应用程序。
添加一个 TCheckListBox
控件,上面有几个项目:
在表单上拖放一个 TActionList
组件。
创建两个操作:aDelete
和 aRename
。将他们的标题设置为 Delete...
和 Rename...
,将他们的提示设置为 Removes the selected item from the list.
和 Renames the selected item in the list.
。
将以下代码添加到它们的 OnExecute
处理程序中:
procedure TForm1.aDeleteExecute(Sender: TObject);
begin
if CheckListBox1.ItemIndex = -1 then
Exit;
if MessageBox(Handle, 'Do you want to delete the selected item?',
'Delete', MB_ICONQUESTION or MB_YESNO) <> IDYES then
Exit;
CheckListBox1.DeleteSelected;
end;
procedure TForm1.aRenameExecute(Sender: TObject);
var
S: string;
begin
if CheckListBox1.ItemIndex = -1 then
Exit;
S := CheckListBox1.Items[CheckListBox1.ItemIndex];
if InputQuery('Rename', 'Please enter the new name:', S) then
CheckListBox1.Items[CheckListBox1.ItemIndex] := S;
end;
将以下代码添加到它们的 OnUpdate
处理程序中:
procedure TForm1.aDeleteUpdate(Sender: TObject);
begin
aDelete.Enabled := CheckListBox1.ItemIndex <> -1;
end;
procedure TForm1.aRenameUpdate(Sender: TObject);
begin
aRename.Enabled := CheckListBox1.ItemIndex <> -1;
end;
在表格上拖 TPopupMenu
。将其命名为 pmList
。添加两个菜单项。将它们的 Action
属性分别设置为 aDelete
和 aRename
。这将自动为项目提供操作的标题、提示和热键:
现在将pmList
分配给复选框控件的PopupMenu
属性。
测试应用程序。请注意,上下文菜单项只有在选择了一个项目时才会启用;否则,它们都被禁用。 (这要归功于 OnUpdate
处理程序。我们跳过这些会很草率。但请注意,我们仍然会验证是否在 OnExceute
处理程序中选择了一个项目。在高质量的软件中,你总是同时使用腰带和牙套。)
当然,我们必须将Del和F2键映射到删除和重命名操作。我们可以使用操作的 ShortCut
属性,但这会使这些键在此列表中删除和重命名,即使另一个 GUI 控件具有焦点,这是非常糟糕的。相反,我们将 OnKeyDown
处理程序添加到复选框控件本身:
procedure TForm1.CheckListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key of
VK_DELETE:
aDelete.Execute;
VK_F2:
aRename.Execute;
end;
end;
大家好,我是 Delphi 初学者,我有一个简单的问题,因为在网上为 Delphi 找东西似乎很难。
我有一个 CheckListBox,当我单击一个项目的复选框时,我想将它传递给另一个表单,假设创建了 form2。我有 2 个按钮:
删除 - 它应该删除选定的项目,以便生成表单的项目。如何删除选中的项目?
编辑条目 - 我需要将选中的项目值传递到另一个表单,我可以在其中编辑值并将其另存为新表单。如何将所选项目的值传递到另一个表单?
Ty 褪色。
这是一个更好的方法:
创建一个新的 VCL 应用程序。
添加一个
TCheckListBox
控件,上面有几个项目:在表单上拖放一个
TActionList
组件。创建两个操作:
aDelete
和aRename
。将他们的标题设置为Delete...
和Rename...
,将他们的提示设置为Removes the selected item from the list.
和Renames the selected item in the list.
。将以下代码添加到它们的
OnExecute
处理程序中:procedure TForm1.aDeleteExecute(Sender: TObject); begin if CheckListBox1.ItemIndex = -1 then Exit; if MessageBox(Handle, 'Do you want to delete the selected item?', 'Delete', MB_ICONQUESTION or MB_YESNO) <> IDYES then Exit; CheckListBox1.DeleteSelected; end; procedure TForm1.aRenameExecute(Sender: TObject); var S: string; begin if CheckListBox1.ItemIndex = -1 then Exit; S := CheckListBox1.Items[CheckListBox1.ItemIndex]; if InputQuery('Rename', 'Please enter the new name:', S) then CheckListBox1.Items[CheckListBox1.ItemIndex] := S; end;
将以下代码添加到它们的
OnUpdate
处理程序中:procedure TForm1.aDeleteUpdate(Sender: TObject); begin aDelete.Enabled := CheckListBox1.ItemIndex <> -1; end; procedure TForm1.aRenameUpdate(Sender: TObject); begin aRename.Enabled := CheckListBox1.ItemIndex <> -1; end;
在表格上拖
TPopupMenu
。将其命名为pmList
。添加两个菜单项。将它们的Action
属性分别设置为aDelete
和aRename
。这将自动为项目提供操作的标题、提示和热键:现在将
pmList
分配给复选框控件的PopupMenu
属性。测试应用程序。请注意,上下文菜单项只有在选择了一个项目时才会启用;否则,它们都被禁用。 (这要归功于
OnUpdate
处理程序。我们跳过这些会很草率。但请注意,我们仍然会验证是否在OnExceute
处理程序中选择了一个项目。在高质量的软件中,你总是同时使用腰带和牙套。)当然,我们必须将Del和F2键映射到删除和重命名操作。我们可以使用操作的
ShortCut
属性,但这会使这些键在此列表中删除和重命名,即使另一个 GUI 控件具有焦点,这是非常糟糕的。相反,我们将OnKeyDown
处理程序添加到复选框控件本身:procedure TForm1.CheckListBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_DELETE: aDelete.Execute; VK_F2: aRename.Execute; end; end;