请问TreeView与contenxMenu的问题 请问在TreeView的节点上按下鼠标右键开启contenxMenu, 但不允许在TreeView的空白处具有contenxMenu的功能, 请问该怎么做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没必要这样限制,你只需要在菜单弹出或者响应事件,检查是否当前选择了有效的TreeItem,再做处理。 做不到这样的功能吗? 还是我的问题不够清楚?换个方式问好了, 在TreeView上最末端的节点与中间节点具有不同的contextMenu内容, 就好像档案总管一样, 以鼠标右键点选数据夹和点选档案以及在空白处出现的选单内容是都不一样的.如果是以TreeView的ContextMenu属性加入contexMenu,那么是在TreeView的任何一个区域都是展现出同一个contexMenu, 那么我要怎么判断鼠标到底是点在那个位置而出现不同的选单呢? 我原本打算在OnMouseDown事件中做动态加载不同的contextMenu, 但在OnMouseDown中我不知道怎么去判断鼠标是否点在节点之上, 但如果是写在AfterSelect事件中的话, 这个事件是鼠标左键所触发的也不对, 有人知道到底该怎么做吗? 你判断好了以后contextmenu.show()就行啊 我现在的做法是先放两个contextMenu1和contextMenu2然后在MouseDown中private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { if(e.Button==MouseButtons.Right){ if(treeView1.GetNodeAt(e.X,e.Y)!=null){ if(treeView1.SelectedNode.Parent!=null){ treeView1.ContextMenu=contextMenu1; }else{ treeView1.ContextMenu=contextMenu2; } } }}当判断右键点选的节点没有父节点时加载contextMenu1否则加载contextMenu2但是这样的做法有个大问题treeView1.SelectedNode不理会右键的选择, 必须先以左键点选后再以右键点选请问该怎么做才对呢? if(treeView1.SelectedNode!=null) { ......} 使用if(treeView1.SelectedNode!=null) { ......}一旦有选择了某一个节点, 会在treeView的空白区域仍对contextMenu有效, 用我之前的判断式才能避免我现在的问题在于SelectedNode无法被鼠标右键触发, 必须先以左键点选后使SelectedNode更新为新的节点再以右键点选才有效, 但这样会引发一个问题, 因为使用者以鼠标左右键点选时在视觉上并没有什么不同, 但却会造成节点判断错误而开启错误的选单. private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){ TreeNode newSelectedNode; newSelectedNode = treeView1.GetNodeAt(e.X, e.Y); if (newSelectedNode != null) { treeView1.SelectedNode = newSelectedNode; }}这样右键鼠标点击节点后就没有问题 我觉得把OnRightClick事件放在节点上应该可以,不过就是代码量多一点而已 请恢复我电脑数据, 如何获得图像的DPI? datagridview修改已绑定列的列值 如何将DataGridView的光标移动到最后一行?? 关于C# WinForm Panel中子窗体的问题 关于C/s很麻烦的问题啊 ,大家推荐一本书吧. 高手进,MDI窗体奇怪的问题,.net 2.0才有这个问题,1.0没有 关于AxWebBrowser问题集欢迎支持浏览器开发 在c sharp中当打印时,如何隐藏掉,当前打印第x页的那个form呢? thanks GDAL将shp数据输出为jpg或png格式的图片? 建立连接后哪个属性可以得到对方的IP 一个关于FileStream的菜菜问题!
换个方式问好了, 在TreeView上最末端的节点与中间节点具有不同的contextMenu内容, 就好像档案总管一样, 以鼠标右键点选数据夹和点选档案以及在空白处出现的选单内容是都不一样的.
如果是以TreeView的ContextMenu属性加入contexMenu,那么是在TreeView的任何一个区域都是展现出同一个contexMenu, 那么我要怎么判断鼠标到底是点在那个位置而出现不同的选单呢?
然后在MouseDown中
private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
if(e.Button==MouseButtons.Right){
if(treeView1.GetNodeAt(e.X,e.Y)!=null){
if(treeView1.SelectedNode.Parent!=null){
treeView1.ContextMenu=contextMenu1;
}else{
treeView1.ContextMenu=contextMenu2;
}
}
}
}
当判断右键点选的节点没有父节点时加载contextMenu1否则加载contextMenu2
但是这样的做法有个大问题
treeView1.SelectedNode不理会右键的选择, 必须先以左键点选后再以右键点选请问该怎么做才对呢?
{
......
}
if(treeView1.SelectedNode!=null)
{
......
}
一旦有选择了某一个节点, 会在treeView的空白区域仍对contextMenu有效, 用我之前的判断式才能避免我现在的问题在于SelectedNode无法被鼠标右键触发, 必须先以左键点选后使SelectedNode更新为
新的节点再以右键点选才有效, 但这样会引发一个问题, 因为使用者以鼠标左右键点选时在视觉上
并没有什么不同, 但却会造成节点判断错误而开启错误的选单.
{
TreeNode newSelectedNode;
newSelectedNode = treeView1.GetNodeAt(e.X, e.Y);
if (newSelectedNode != null)
{
treeView1.SelectedNode = newSelectedNode;
}
}
这样右键鼠标点击节点后就没有问题