使用TreeView作导航,想法是每点击一个TreeNode就会弹出相应的子窗体。但是遇到了以下问题:如果弹出窗体的代码写在OnChange事件里面,发现当窗体被关闭后,再次点击选中节点,不会触发OnChange事件,失败;如果使用OnClick事件,发现点击TreeView的任何地方(哪怕没有点击任何节点),都会弹出被选中那个节点对应的窗体,失败;于是改在OnMouseDown/Up事件中获取鼠标的坐标X,Y,然后再OnClick事件中使用GetNodeAt方法获得被点中的节点,情况稍有改观——但是——点击节点左侧的展开符号[+]时,会以一定概率弹出被展开的第一个子节点对应的窗体,失败中的失败……那位高人能给一个比较完美的解决办法?残念中……
解决方案 »
- 现在想开发个《二维图形测量软件》,请教思路和算法!
- SQL记录定位,并在Form间传递的问题
- cxGrid5.0显示rtf格式,出现一点小麻烦,200分求解决方案。
- listview使用问题!
- 在线等答案!!!!!!急急急......立马给分.
- "Temporary table resource limit"(BDE错误)程序运行当打开一个表时出现上面的错误提示,怎么处理呢?
- 為什么我用數据流把jpg檔導入數据庫后再把它導出來時它的大小就從几十k變成几百k了.
- 那里有OFFICE 2000下载,回答正确立即给分!
- 我快搞晕了,大虾们,快来帮帮我!mscomm控件的问题!
- 一个注册表浏览器源代码!
- 一个F1book问题,懂的帮帮忙!!万分感谢……
- 大家好!帮忙介绍及delphi网站
var
pt: TPoint;
tNode: TTreeNode;
begin
GetCursorPos(pt);
pt := TreeView1.ScreenToClient(pt);
tNode := TreeView1.GetNodeAt(pt.X, pt.Y);
if tNode <> nil then begin
if tNode <> TreeView1.Selected then Exit;
if not PtInRect(tNode.DisplayRect(True), pt) then Exit;
ShowMessage(tNode.Text);
// 显示相应窗体
end;
end;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
h: THitTests;
n: TTreeNode;
begin
h:=tvNavigater.GetHitTestInfoAt(X,Y); if (htOnItem in h) or (htOnIcon in h) then
begin
n:=tvNavigater.GetNodeAt(X,Y);
if not(n=nil) then
begin
//显示窗体
end;
end;
end;