马晓峰 发表于 2015-10-9 21:53:00

editor 右键菜单

是这样的我现在不想用editor自带的右键菜单contextMenuStrip,自己写了一个右键菜单叫contextMenuStrip4,contextMenuStrip4有一个菜单项----删除,当点击了删除后我想获得contextMenuStrip4.SourceControl,应当为editor类型,但是一直系那是为null,怎么回事?
求教

Alice 发表于 2015-10-10 08:58:00

回复 1楼马晓峰的帖子

谢谢对该问题的反馈。
无法模拟你的场景,请提供一个重现的Demo,我们帮你看看。

马晓峰 发表于 2015-10-10 09:23:00

回复 2楼Alice的帖子


这是我写的一个demo,当在editor上右键【删除】,程序崩溃, contextMenuStrip1.SourceControl为null,求指教

Alice 发表于 2015-10-10 09:37:00

回复 3楼马晓峰的帖子

好的。谢谢提供的Demo。
你的问题我们收到了,测试后给你反馈。

Alice 发表于 2015-10-10 14:28:00

回复 3楼马晓峰的帖子

你好。
ContextMenuScrip是微软的标准控件,contextmentstrip(二级菜单)通过owner获取了父级contextmenustrip的SourceControl会是null。(你将C1Editor替换成其他的标准控件,也是同样的结果)

针对标准控件,建议在主contextmenustrip中加一个Opening事件,然后在一个全局变量中保存主contextmenustrip的sourcecontrol,然后在子级的事件中就可以调用该变量来取主菜单的sourcecontrol。

马晓峰 发表于 2015-10-10 14:52:00

回复 5楼Alice的帖子

我又做了一个demo,里边有RichTextBox和editor两种,都是用的contextMenuStrip,RichTextBox可以删除
而editor不能显示父窗体为null,。都是用一级菜单求得sourcecontrol。您再看看



private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
      {

            // contextMenuStrip1.SourceControl一直为 null


            C1.Win.C1Editor.C1Editor c1editor = contextMenuStrip1.SourceControl as C1.Win.C1Editor.C1Editor;

            DialogResult dr = MessageBox.Show("是否删除?", "删除", MessageBoxButtons.OKCancel);
            if (dr == DialogResult.OK)
            {            
                c1editor.Parent.Controls.Remove(c1editor);//删除TextBox控件

            }
      }
      /// <summary>
      /// 删除文本框
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void 删除ToolStripMenuItem1_Click(object sender, EventArgs e)
      {
            RichTextBox tb = contextMenuStrip2.SourceControl as RichTextBox;
            DialogResult dr = MessageBox.Show("是否删除?", "删除", MessageBoxButtons.OKCancel);
            if (dr == DialogResult.OK)
            {
                tb.Parent.Controls.Remove(tb);//删除TextBox控件

            }
      }
    }

马晓峰 发表于 2015-10-10 14:54:00

回复 5楼Alice的帖子

如果还是不行,能否提供 #5#楼方法 的相关代码,供参考。谢谢

马晓峰 发表于 2015-10-10 14:55:00

回复 5楼Alice的帖子

我刚刚试了,在主菜单的opening事件中也不能获得sourcecontrol,是否是一个bug??

马晓峰 发表于 2015-10-10 15:00:00

回复 8楼马晓峰的帖子

这是我的opening事件代码,contextMenuStrip4.SourceControl依然为null

private void contextMenuStrip4_Opening_1(object sender, CancelEventArgs e)
      {
            C1.Win.C1Editor.C1Editor c1editor = contextMenuStrip4.SourceControl as C1.Win.C1Editor.C1Editor;
            string jj = &quot;fgd&quot;;
      }

马晓峰 发表于 2015-10-10 16:18:00

回复 5楼Alice的帖子

忽然想起今天是周末,您辛苦了
页: [1] 2
查看完整版本: editor 右键菜单