我发现了与TTreeView
相关的错误。
TTreeView
且HideSelection
设置为True
的表单。结果如下:
但实际上应该没有突出显示的项目。有趣的是,最后一个项目被选中,它不再被突出显示,实际上应该是所有其他项目。似乎最近点击的项目是获得特殊处理的项目。
如果您在编辑框中(或实际上任何其他需要对焦的控件)单击,则会正确隐藏所有项目。因此,将焦点转移到表单上的另一个控件是很好的 - 问题似乎仅限于停用表单。
我通过反复试验发现,只要表单被停用并激活(需要防止错误的镜像),我就可以通过在树视图上调用Invalidate
来解决这个问题。但是,我正在寻找一个更好的理解错误是什么以及如何以较少侵入性的方式修复它,即在树视图级别而不是包含的表单级别。
总而言之,我的问题是:
TForm
事件的代码的情况下修复它?将问题提交为QC#94908。
答案 0 :(得分:9)
解决方案似乎是通过使所选节点无效来响应NM_SETFOCUS
和NM_KILLFOCUS
通知。您可以直接修改TCustomTreeView.CNNotify
,也可以编写新的TCustomTreeView
后代。这是一个快速入侵,只显示缺少的代码:
type
TTreeView = class(ComCtrls.TTreeView)
private
procedure CNNotify(var Message: TWMNotifyTV); message CN_NOTIFY;
end;
procedure TTreeView.CNNotify(var Message: TWMNotifyTV);
begin
case Message.NMHdr^.code of
NM_KILLFOCUS, NM_SETFOCUS:
InvalidateSelectionsRects;
end;
inherited;
end;
修改:David的QC report。