treeview中selectedImage问题

mznxbc123456 2014-04-09 09:58:23
如下代码,我程序跑起来的时候会默认选择我第一个node节点,不知道是怎么回事,程序一运行就响应
treeView1_AfterSelect
还弹出显示PLC的对话框了。这个问题搞不明白了。

我也不能把属性里的selectedImage去掉,我不想在选中的时候有图片的改变,这也去不了

这是我的代码
private void Form1_Load(object sender, EventArgs e)
{
GetMenu(plcView, menuStrip1);
}

public void GetMenu(TreeView treeV, MenuStrip MenuS)
{
bool Var_Bool = true;
//遍历MenuStrip组件中的一级菜单项
for (int i = 0; i < MenuS.Items.Count; i++)
{
//将一级菜单项的名称添加到TreeView组件的根节点中,并设置当前节点的子节点newNode1
TreeNode newNode1 = treeV.Nodes.Add(MenuS.Items[i].Text);
treeV.ImageIndex = 1;
//判断当前项是否为可用
if (MenuS.Items[i].Enabled == false)
{
//改变树节点的字体颜色为不可用色
newNode1.ForeColor = Color.Silver;
Var_Bool = false;
}
else
{
//改变树节点的字体颜色为可用色
newNode1.ForeColor = Color.Black;
Var_Bool = true;
}
//标识,有子项的命令项
newNode1.Tag = 0;
//将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
ToolStripDropDownItem newmenu = (ToolStripDropDownItem)MenuS.Items[i];
//添加多层命令项
//GetCavernMenu(newNode1, newmenu, Var_Bool);
}
}

public void GetCavernMenu(TreeNode newNodeA, ToolStripDropDownItem newmenuA, bool BL)
{
bool Var_Bool = true;
if (newmenuA.HasDropDownItems && newmenuA.DropDownItems.Count > 0)
{
//遍历二级菜单项
for (int j = 0; j < newmenuA.DropDownItems.Count; j++)
{
//将二级菜单名称添加到TreeView组件的子节点newNode1中,并设置当前节点的子节点newNode2
TreeNode newNodeB = newNodeA.Nodes.Add(newmenuA.DropDownItems[j].Text);
newNodeB.ImageIndex = 3;
Var_Bool = true;
//判断当前命令项的上一级命令是否可用
if (BL == false)
{
//设置当前命令项的字体颜色为不可用色
newNodeB.ForeColor = Color.Silver;
//标识,不显示相应的窗体
newNodeB.Tag = 0;
Var_Bool = false;
}
else
{
//判断当前命令项是否为可用
if (newmenuA.DropDownItems[j].Enabled == false)
{
//设置当前命令项的字体颜色为不可用色
newNodeB.ForeColor = Color.Silver;
//标识,不显示相应的窗体
newNodeB.Tag = 0;
Var_Bool = false;
}
else
{
//设置当前命令项的字体颜色为可用色
newNodeA.ForeColor = Color.Black;
//标识,显示相应的窗体
newNodeB.Tag = int.Parse(newmenuA.DropDownItems[j].Tag.ToString());
}
}
//将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
//继续遍历
ToolStripDropDownItem newmenuB = (ToolStripDropDownItem)newmenuA.DropDownItems[j];
//如果当前命令项有子项
if (newmenuB.HasDropDownItems && newmenuA.DropDownItems.Count > 0)
{
//标识,有子项的命令项
newNodeB.Tag = 0;
//调用递归方法
GetCavernMenu(newNodeB, newmenuB, Var_Bool);
}
}
}
}

protected void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
// Determine by checking the Text property.
//MessageBox.Show(e.Node.Text);
}
}
...全文
141 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mznxbc123456 2014-04-09
  • 打赏
  • 举报
回复
引用 4 楼 lvxinyi123 的回复:
mark 如果没人回答,楼主分享下方法
方法会告诉大家的,但是treeview这个控件蛮奇怪的,有点无语啊
for (int i = 0; i < MenuS.Items.Count; i++) 
            {
                //将一级菜单项的名称添加到TreeView组件的根节点中,并设置当前节点的子节点newNode1
                TreeNode newNode1 = treeV.Nodes.Add(MenuS.Items[i].Text);
                if (0 == i)
                {
                    treeV.ImageIndex = 0;
                    treeV.SelectedImageIndex = 0;
                }
                else
                {
                    treeV.ImageIndex = 1;
                    treeV.SelectedImageIndex = 1;
                }
                //判断当前项是否为可用
                if (MenuS.Items[i].Enabled == false)
                {
                    //改变树节点的字体颜色为不可用色
                    newNode1.ForeColor = Color.Silver;
                    Var_Bool = false;
                }
                else
                {
                    //改变树节点的字体颜色为可用色
                    newNode1.ForeColor = Color.Black;
                    Var_Bool = true;
                }
                //标识,有子项的命令项
                newNode1.Tag = 0;
                //将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
                ToolStripDropDownItem newmenu = (ToolStripDropDownItem)MenuS.Items[i];
                //添加多层命令项
                GetCavernMenu(newNode1, newmenu, Var_Bool);
            }
i肯定是从0到4的,但是在treeview中图标都是一样的,而且代码也走到if中去了,为什么图标没有变成0的呢?我很奇怪
弑天屠龙 2014-04-09
  • 打赏
  • 举报
回复
好东西不能独自藏着掖着呀~拿出来给大家分享下!我还不会这玩意呢
  • 打赏
  • 举报
回复
mark 如果没人回答,楼主分享下方法
饺子87 2014-04-09
  • 打赏
  • 举报
回复
怎么解决的?
mznxbc123456 2014-04-09
  • 打赏
  • 举报
回复
第二个问题也解决了,谁来回答一下 我结贴给分
mznxbc123456 2014-04-09
  • 打赏
  • 举报
回复
第一个问题我已经解决了,现在程序跑起来不会再默认选中treeview第一个了,只要在程序加载时添加
this.Select();
让窗体获得焦点即可。 可是第二个怎么解决呢?我不想设置选择的image,不管是不是选中图片是一样的
mznxbc123456 2014-04-09
  • 打赏
  • 举报
回复
问题已经如数解决了~自己发现了

110,502

社区成员

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

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

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