我正在尝试在TListView中的现有列之间添加一列.因此,我在最后添加新列,并通过将其索引设置为指定值来移动它.这有效,直到添加另一个新列.
我做了什么:在最后位置添加列(Columns.Add)并在最后位置(Subitems.Add)添加子项.然后我通过将列的索引设置为正确的位置来移动列.只要只添加一列,这样就可以正常工作.添加第二个新列时,子项目会被搞砸.第一列的新子项移动到最后一个位置,例如:
0 | 1 | new A | new B | 3
Caption | old sub 1 | old sub 3 | new Sub B | new sub A
Run Code Online (Sandbox Code Playgroud)
如果有人可以提供帮助,我会很高兴!
例如,是否可能有一个命令或消息我可以发送到ListView,所以它刷新或保存它的Column - > Subitem映射,我可以在添加第一个新列及其子项后使用,以便我可以处理第二个新列和第一个一样.
或者这只是TListViews列的一个错误 - >子项处理或TListColumns ......?
vcl表单应用程序的示例代码(指定Form1.OnCreate事件):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
listview: TListView;
initButton: TButton;
addColumn: TButton;
editColumn: TEdit;
subItemCount: Integer;
procedure OnInitClick(Sender: TObject);
procedure OnAddClick(Sender: TObject);
public …Run Code Online (Sandbox Code Playgroud) 我在表单中有一个TListView,我想知道所选项目的索引.我试图找到我的TListView的方法或属性,它提供了该信息,但我发现的唯一的东西是lvClients.Selected它并没有给出这个项目的索引.
有人可以帮我找到如何在TListView中获取所选项目的索引吗?谢谢.
首先这可能吗?
我有两个问题 - 第一个问题是,在运行时创建时,我无法让组出现在TListView中.我正在使用以下代码:
lg := lvResults.Groups.Add;
lg.Header := 'New Starters';
lg.GroupID := 0;
Run Code Online (Sandbox Code Playgroud)
第二个是即使我在设计时创建组 - 我可以在表单设计器中看到它们 - 它们在运行时不存在 - 甚至在我刷新数据以添加我自己的项目之前...
附加:我已经确认以下答案适用于处女项目.但是在我想要使用它的项目中失败了!我已经用调色板中的新TListView取代了我的TListView,没有任何乐趣.列表视图位于tpagecontrol上
我有一个TListView(在报告模式下),我在虚拟模式下使用(OwnerData:= True).除了我知道的自动自动调整列的两种情况之外,一切都很好.他们是:
在虚拟模式下这些事件的默认处理并不真正起作用(它似乎在第一行数据上自动调整.)我想挂钩行为并自己进行列自动调整.有谁知道这是怎么做到的吗?或许我错过了一些明显的东西?我正在使用Delphi XE.谢谢你的任何建议.
我正在尝试在TListView设置为ViewStyle = vsReport的列中调整大小后触发事件.
具体来说,我有两个ListViews,我想保持列宽度相同.只有一个listView具有列标题,因此需要将事件链接到这些列.
在TListViews的可用程序中,似乎没有相关选项......
有帮助吗?
所以基本上当用户点击复选框时,我想在我的列表中添加该项,我尝试使用OnChange事件,但这对我不起作用,因为即使没有点击Checkbox也会被触发.
我的代码简单明了
procedure LvUserChange(Sender: TObject; Item: TListItem;Change: TItemChange);
var
objUser : TUsers;
begin
if not assigned(objListOfChangedUsers) then
objListOfChangedUsers := TObjectList.Create;
objUser := Item.Data;
objListOfChangedUsers.Add(objUser);
end;
Run Code Online (Sandbox Code Playgroud)
我希望只有在ListView中单击复选框时才会触发此代码
tListView的选定行显示为蓝色,但仅在控件具有焦点时才显示.我希望始终显示所选行,无论控件是否具有焦点.
我试图让所有者在报告模式下使用4列绘制列表视图控件OnCustomDrawItem.
当我尝试更改Canvas.font.color时,我就是这样,我没有问题.
如果我设置canvas.font.size,我发现控件绘制的文本大小没有变化.
如果我试图从OnCustomDrawItem中接管文本的绘画,我发现我做不到.我知道如何使用OnCustomDraw在背景区域绘制,但我想自定义绘制listview ITEM,以便我可以设置文本的颜色和字体名称以及字体大小.
我知道在ListView所有者绘制的上下文中使用Canvas存在一些问题,以及在ListView中可以执行的操作的一些限制.
procedure TForm1.MyListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
Sender.Canvas.Font.Size := 13; // NO effect.
Sender.Canvas.Font.Color := clRed; // WORKS.
Sender.Canvas.Font.Style :=Sender.Canvas.Font.Style + [fsBold]; // WORKS!
end;
Run Code Online (Sandbox Code Playgroud) 在vsReport ViewStyle中使用TListview并激活任何VCL样式时,标题中的图像不会显示.取消经典的Windows风格,图像出现.(显示我使用的图像的方法是将TImageList分配给ListView的SmallImages属性,然后在各列的Columns属性中选择图像索引).如何在启用了VCL样式的TListView的标题中显示图像?
Delphi XE4 Update 1和Windows 8.
当我将组和项添加到列表视图时,它们会正确显示.当我然后清除项目和组,并再次添加它们时,什么都没有出现.当然这不是预期的行为?
来自DFM:
object lv: TListView
Left = 24
Top = 20
Width = 250
Height = 225
Columns = <
item
Caption = 'Model'
Width = 180
end>
GroupView = True
ReadOnly = True
RowSelect = True
TabOrder = 0
ViewStyle = vsReport
end
Run Code Online (Sandbox Code Playgroud)
代码:
procedure TForm1.Button1Click(Sender: TObject);
var
LListGroup: TListGroup;
LListItem: TListItem;
begin
lv.Items.Clear;
lv.Groups.Clear;
LListGroup := lv.Groups.Add;
LListGroup.Header := 'Ford';
LListItem := lv.Items.Add;
LListItem.Caption := 'Escape';
LListItem.GroupID := LListGroup.ID;
LListItem := lv.Items.Add;
LListItem.Caption …Run Code Online (Sandbox Code Playgroud) delphi ×10
tlistview ×10
delphi-2010 ×2
delphi-2007 ×1
dynamic ×1
ownerdrawn ×1
subitem ×1
vcl-styles ×1