ToolStripMenuItem方法的一些疑问

fangshaoshen 2012-01-11 09:50:10
遇到一个问题,请教下各位。
我在一个已有的菜单 ParentMenu 下添加一个新的菜单项 Menu1 让后调用这个 Menu1 的Click事件

ToolStripMenuItem ParentMenu = new ToolStripMenuItem("Parent");

ToolStripMenuItem Menu1 = new ToolStripMenuItem("Menu1");

Menu1.Click += new EventHandler(this.ToolStripMenuItem_Click); //Click事件

ParentMenu.DropDownItems.Add(Menu1);

this.ToolStripMenuItem_Click(Menu1, null)



事件中使用 GetCurrentParent() 获取他的父级。
然后 逐个检索父级下的数据 将所有Check=true 的改为false
最后将 当前点击的菜单 Check = true;



/// <summary>
/// 菜单点击事件
/// 1.将该菜单下所有选中的子菜单改为false
/// 2.将点击的菜单check改为True
/// 3.根据ID更新下一级菜单内容
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
ToolStripMenuItem mi;
//将现有项状态改为选中项
ToolStripMenuItem tsmi = (ToolStripMenuItem)sender;
//将原来被选中的菜单项 取消选中
ToolStrip test = tsmi.GetCurrentParent();//这里获取的结果为null
foreach (object obj in tsmi.GetCurrentParent().Items)
{
if(obj.GetType() ==typeof(ToolStripMenuItem))
{
mi = (ToolStripMenuItem)obj;
if (mi.Checked)
{
mi.Checked = false;
}
}
}
tsmi.Checked = true;
}




现在我遇到的问题是 ToolStrip test = tsmi.GetCurrentParent();//这里获取的结果为null

这个方法我测试过的 没有问题。 就是像上面所说的情况下 会出现为null
如果我添加 Menu1 的时候不调用Click事件 再在页面上点击这个添加的菜单 都是没有问题的。
而我像上面第一段代码那样 添加完 Menu1 直接调用它的Click事件 就出问题了。

不知道为什么会出现这样的问题。 请各位给我出出主意。 谢谢。
...全文
456 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangshaoshen 2012-01-11
  • 打赏
  • 举报
回复
谢谢。。自己太懒了。 都没有自信看它的方法。。 呵呵 。。 非常感谢
testtestett 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fangshaoshen 的回复:]
引用 3 楼 gws044010607 的回复:

ToolStripMenuItem不是个Control,应该是需要在整个Form加载完后,才能确定它的Parent.


受教了。。谢谢
[/Quote]

不客气。
testtestett 2012-01-11
  • 打赏
  • 举报
回复
字打错了:

还有ToolStrip test = tsmi.GetCurrentParent(); 你这里获取到的Parent不一定是ToolStrip,可能是ToolStripMenuItem,所以直接转化成ToolStrip也是有问题的。
testtestett 2012-01-11
  • 打赏
  • 举报
回复
还有ToolStrip test = tsmi.GetCurrentParent(); 你这里获取到的Parent不一定是ToolStrip,可能是ToolStripMenuItem,所有直接转化成ToolStrip也是有问题的。
fangshaoshen 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gws044010607 的回复:]

你可以用.OwnerItem找到它的父级Item
[/Quote]

谢谢。 呵呵 。。
testtestett 2012-01-11
  • 打赏
  • 举报
回复
你可以用.OwnerItem找到它的父级Item
fangshaoshen 2012-01-11
  • 打赏
  • 举报
回复
这个 父节点 该怎么获取呢?
fangshaoshen 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gws044010607 的回复:]

ToolStripMenuItem不是个Control,应该是需要在整个Form加载完后,才能确定它的Parent.
[/Quote]

受教了。。谢谢
testtestett 2012-01-11
  • 打赏
  • 举报
回复
ToolStripMenuItem不是个Control,应该是需要在整个Form加载完后,才能确定它的Parent.

110,534

社区成员

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

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

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