如何 select 在 PopupMenu.OnPopup 事件处理程序中右键单击 TreeView 节点?
How to select the right-clicked TreeView node in PopupMenu.OnPopup event-handler?
在 Windows 10 in Delphi 11 Alexandria 中的 32 位 VCL 应用程序中,我有一个 TreeView(TTreeView
后代),其中 MultiSelect = False
和 PopupMenu = PopupMenu1
,因此当我右键单击 TreeView 中的一个节点时,将调用 PopupMenu1
。
在 PopupMenu1.OnPopup
事件处理程序中,我需要以编程方式选择右键单击的节点。我该怎么做?
示例:在以下屏幕截图中,预选了第一个节点。当我右键单击最后一个节点以调用弹出菜单时,最后一个节点也被视觉选中(尽管 MultiSelect = False
!):
但是,当我尝试检测 PopupMenu1.OnPopup
事件处理程序中的选定节点时:
procedure TformMain.PopupMenu1Popup(Sender: TObject);
begin
CodeSite.Send(MyTreeView.Selected.Text', MyTreeView.Selected.Text);
end;
...然后 CodeSite 报告仍选择第一个节点!
那么如何在PopupMenu1.OnPopup
事件处理程序中设置右键单击的节点被选中?
(请注意 TreeView 的 OnMouseDown
事件处理程序在 PopupMenu1.OnPopup
事件处理程序之后执行)
显然,TPopupMenu
class 缺少 OnBeforePopup
事件!
我知道的最简单的解决方案是使用 OnContextPopup
事件:
procedure TForm1.TreeView1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
var TreeNode := TreeView1.GetNodeAt(MousePos.X, MousePos.Y);
if Assigned(TreeNode) then
TreeNode.Selected := True;
end;
在 Windows 10 in Delphi 11 Alexandria 中的 32 位 VCL 应用程序中,我有一个 TreeView(TTreeView
后代),其中 MultiSelect = False
和 PopupMenu = PopupMenu1
,因此当我右键单击 TreeView 中的一个节点时,将调用 PopupMenu1
。
在 PopupMenu1.OnPopup
事件处理程序中,我需要以编程方式选择右键单击的节点。我该怎么做?
示例:在以下屏幕截图中,预选了第一个节点。当我右键单击最后一个节点以调用弹出菜单时,最后一个节点也被视觉选中(尽管 MultiSelect = False
!):
但是,当我尝试检测 PopupMenu1.OnPopup
事件处理程序中的选定节点时:
procedure TformMain.PopupMenu1Popup(Sender: TObject);
begin
CodeSite.Send(MyTreeView.Selected.Text', MyTreeView.Selected.Text);
end;
...然后 CodeSite 报告仍选择第一个节点!
那么如何在PopupMenu1.OnPopup
事件处理程序中设置右键单击的节点被选中?
(请注意 TreeView 的 OnMouseDown
事件处理程序在 PopupMenu1.OnPopup
事件处理程序之后执行)
显然,TPopupMenu
class 缺少 OnBeforePopup
事件!
我知道的最简单的解决方案是使用 OnContextPopup
事件:
procedure TForm1.TreeView1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
var TreeNode := TreeView1.GetNodeAt(MousePos.X, MousePos.Y);
if Assigned(TreeNode) then
TreeNode.Selected := True;
end;