treeview和contextmenu问题

babymes 2004-05-09 03:09:39
http://www.microsoft.com/china/community/Column/21.mspx
这种方法可以根据判断深度来判断节点,
而我要根据所选择的节点来使右键菜单中某些项无效。

请问如何实现

...全文
193 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
babymes 2004-05-09
  • 打赏
  • 举报
回复
自己用了比较土的办法搞定了
不过还是谢谢大家
lutao206 2004-05-09
  • 打赏
  • 举报
回复
private int GetNodeNum()
{ int i =0;
TreeNode node = this.treeView1.SelectedNode;
while(node != null)
{
ntext = node.Text;

node = node.Parent;

i++;

if(node != null)
{
nodetext = node.Text;
}
}
return i;
}
*******************************
i为返回节点数,你还想怎么做?发个短信给我吧。
Hexudong1979 2004-05-09
  • 打赏
  • 举报
回复
给你看一下曾经好久以前写的代码,也许对你有用
private void tvwType_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
try
{
IsSearch=false;

this.Cursor=Cursors.WaitCursor;
tvwType.SelectedNode = tvwType.GetNodeAt (e.X ,e.Y );
//记录当前选中树节点
tnDrugClass=tvwType.SelectedNode;
m_objDrugClass=(DrugClass)tvwType.SelectedNode.Tag;

if(e.Button == MouseButtons.Left)
{
//如果当前选择节点为根节点,则返回
if(tvwType.SelectedNode==tvwType.Nodes[0])
{
lvwAliases.Items.Clear();
lvwDrugName.Items.Clear();
lvwDrugSpecs.Items.Clear();
lvwPrices.Items.Clear();
btnAddDrug.Enabled=false;
m_objDrugClass=null;
this.Cursor=Cursors.Default;
return;
}

// m_objDrugClass=(DrugClass)tvwType.SelectedNode.Tag;

DrugNames dns1=new ManageDrug().GetDrugNamesByClass(m_objDrugClass.ID);
//药品名集合中的药品名数大于0,则加载药品名到lvwDrugName
if(dns1.Count>0)
{
Load_lvwDrugName(dns1);
}
else
{
//药品名集合中的药品名数小于等于0,则清空各个数据ListView
lvwAliases.Items.Clear();
lvwDrugName.Items.Clear();
lvwDrugSpecs.Items.Clear();
lvwPrices.Items.Clear();

SetButtons_truEnabled();

this.Cursor=Cursors.Default;
return;
}
}
else if(e.Button==MouseButtons.Right)
{
tvwType.ContextMenu=this.ctMenuType;
//选择当前节点,则相应设置ctMenuType中的可见属性
if(tvwType.SelectedNode==tvwType.Nodes[0])
{
lvwAliases.Items.Clear();
for(int i=1;i<ctMenuType.MenuItems.Count;i++)
{
ctMenuType.MenuItems[i].Visible=false;
}
menuAddType.Visible=true;
}
else if(tvwType.SelectedNode.Nodes.Count>0)
{
for(int i=0;i<ctMenuType.MenuItems.Count;i++)
{
ctMenuType.MenuItems[i].Visible=true;
}
menuAddDrug.Visible=false;
}
else
{
for(int i=0;i<ctMenuType.MenuItems.Count;i++)
{
ctMenuType.MenuItems[i].Visible=true;
}
}
// m_objDrugClass=(DrugClass)tvwType.SelectedNode.Tag;
}

SetButtons_truEnabled();

this.Cursor=Cursors.Default;
}
catch//(Exception h)
{
// MessageBox.Show(h.Message);
//tvwType.SelectedNode=tvwType.Nodes[0];

for(int i=0;i<ctMenuType.MenuItems.Count;i++)
{
ctMenuType.MenuItems[i].Visible=false;
}

m_objDrugName=null;
m_objDrugAlias=null;
m_objDrugSpec=null;
m_objDrugPrice=null;

this.Cursor=Cursors.Default;
}
}
jackyoung02 2004-05-09
  • 打赏
  • 举报
回复
使用MouseDown事件
babymes 2004-05-09
  • 打赏
  • 举报
回复
我用的是afterselect事件
不过没用
babymes 2004-05-09
  • 打赏
  • 举报
回复
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
string sqlstr="select depth from tbTree";
CN= new SqlConnection(ConnectString);
CN.Open();
adp = new SqlDataAdapter(sqlstr,CN);
adp.Fill(ds);
string[] strings={ds.Tables[0].Columns.ToString()};
foreach (string str in strings)
{

switch(str)
{
case "0":

contextMenu1.MenuItems[0].Enabled=false;
contextMenu1.MenuItems[2].Enabled=false;
contextMenu1.MenuItems[3].Enabled=false;
contextMenu1.MenuItems[4].Enabled=false;
break;

}

}


}
yzx110 2004-05-09
  • 打赏
  • 举报
回复
处理菜单的Popup事件,判断选中的节点,根据你的需要是某些菜单无效就可以了。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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