在Treeview中的右键菜单怎么做?

ttyp 2001-06-22 02:50:00
popupmenu 放在NODECLICK事件中时,无法判断是否是右键按下,
放在MOUSEDOWN事件中时,又不知是哪个接点被选中,怎么办?
顺便问一下,TOOLBAR中移到哪个按钮在STATUSBAR中显示提示怎么做?
在它的MOUSEMOVE中判断 X/按钮宽度,在有分隔副时是不行的
...全文
372 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttyp 2001-06-23
  • 打赏
  • 举报
回复
foxmsdn(天堂雪狐) 能不能具体点,今天结帐
foxmsdn 2001-06-22
  • 打赏
  • 举报
回复
方法都不好,我认为最好用细分子类技术,你的两个问题都可以解决。
playyuer 2001-06-22
  • 打赏
  • 举报
回复
menuPopupItem.Caption = TreeView1.SelectedItem.Text

'仅仅是确认一下你单击的是哪一个节点!
ttyp 2001-06-22
  • 打赏
  • 举报
回复
to ltpao(啊炮): 我是用的第二次的代码 mcSel.Key= "关键" ,关键是什么?去掉后,不是很理想
to xltang(深流):你的VC代码我看了,没试,应该说弹出菜单是没问题,但是是TREEVIEW的任何地方都会弹出,没有根据选择的接点弹出
sfireball 2001-06-22
  • 打赏
  • 举报
回复
ft,
指针都有,老兄,服了
xltang 2001-06-22
  • 打赏
  • 举报
回复
呵呵,这段代码是从我做的工程中摘录的,肯定行。
CTreeView 本身支持右键事件的,不必用mouse 等底层的事件
xltang 2001-06-22
  • 打赏
  • 举报
回复
看下面的源码,我们就是这样做的。
void CBhjkgView_Left::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
POINT point;
::GetCursorPos(&point);
m_PopMenu.GetSubMenu(2)->TrackPopupMenu(TPM_LEFTALIGN, point.x,point.y,this,0);
*pResult = 0;
}
ltpao 2001-06-22
  • 打赏
  • 举报
回复
用我的方法试也试
ttyp 2001-06-22
  • 打赏
  • 举报
回复
用playyuer(女㊣爱)的办法,在没选中接点附近右击时,有点跳,选中的接点跳来跳去的
ttyp 2001-06-22
  • 打赏
  • 举报
回复
不愧是斑竹,按你的方法是基本搞定
menuPopupItem.Caption = TreeView1.SelectedItem.Text这句什么意思,我没用这句,
不知第二个问题有什么好办法吗?争取明天结帐
playyuer 2001-06-22
  • 打赏
  • 举报
回复
Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = vbRightButton Then
If TreeView1.SelectedItem Is TreeView1.HitTest(x, y) Then
menuPopupItem.Caption = TreeView1.SelectedItem.Text
Me.PopupMenu menuPopup
End If
End If
End Sub
sfireball 2001-06-22
  • 打赏
  • 举报
回复
第二问我也没有什么好办法
ltpao 2001-06-22
  • 打赏
  • 举报
回复
上面的代码点右键可以选中节点,不过点第二下右键才会弹出右键菜单
sfireball 2001-06-22
  • 打赏
  • 举报
回复
呵呵,
Dim CurNode As Node
自己定义的变量
用来存储点击的节点
上面的代码只是一个片断,说明问题用的
ltpao 2001-06-22
  • 打赏
  • 举报
回复
'声明一个模块级变量
Private mcSel As Node
Private Sub tv_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Not mcSel Is Nothing Then
If mcSel.Key= "关键" And Button = vbRightButton Then PopupMenu 菜单
End If
End Sub

Private Sub tv_NodeClick(ByVal Node As MSComctlLib.Node)
Set mcSel = Node
End Sub
ttyp 2001-06-22
  • 打赏
  • 举报
回复
谢谢你们了,还真快
to:nanhill(米) 有连接地址吗?
to:sfireball(阿飞) CurNode是TREEVIEW自带的吗,没有定义
to:tanyx(不知道) 你的方法到是可以,我还没试,我也这样想过,有没有简单的方法,TREEVIEW应该不会这么烂吧
to:superjs(真剑神) 我是想最好右击接点时,让此接点选中
to:sfireball(阿飞) 我是用了TOOLTIP,但要判断鼠标移到了哪个BUTTON
playyuer 2001-06-22
  • 打赏
  • 举报
回复
TreeView1.SelectedItem
ltpao 2001-06-22
  • 打赏
  • 举报
回复
'声明一个模块级变量
Private mcSel As Node
Private Sub tv_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
Static fNoPop As Boolean
If Not mcSel Is Nothing Then
If mcSel.Key= "关键" Then
If Button = vbRightButton Then
If fNoPop = False Then
PopupMenu 菜单
fNoPop = True
Else
fNoPop = False
End If
Else
fNoPop = False
End If
Else
fNoPop = False
End If
End If
End Sub

Private Sub tvTrain_NodeClick(ByVal Node As MSComctlLib.Node)
Set mcSel = Node
End Sub
sfireball 2001-06-22
  • 打赏
  • 举报
回复
第二问中
使用tooltip存储提示信息
在mousemove中显示tooltip
tanyx 2001-06-22
  • 打赏
  • 举报
回复
刚好我做过了。
在MOUSE——DOWN事件里设置一个右建标志(不是右建就清除标志),然后在NODE——CLICK事件里处理就行。
加载更多回复(3)

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧