找回密码
 立即注册

QQ登录

只需一步,快速开始

马晓峰

初级会员

28

主题

99

帖子

239

积分

初级会员

积分
239

活字格认证

马晓峰
初级会员   /  发表于:2015-10-9 21:52  /   查看:11861  /  回复:11
是这样的我现在不想用editor自带的右键菜单contextMenuStrip,自己写了一个右键菜单叫contextMenuStrip4,contextMenuStrip4有一个菜单项----删除,当点击了删除后我想获得contextMenuStrip4.SourceControl,应当为editor类型,但是一直系那是为null,怎么回事?
求教

11 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-10-10 08:58:00
沙发
回复 1楼马晓峰的帖子

谢谢对该问题的反馈。
无法模拟你的场景,请提供一个重现的Demo,我们帮你看看。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
马晓峰
初级会员   /  发表于:2015-10-10 09:23:00
板凳
回复 2楼Alice的帖子


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-10 09:37:00
地板
回复 3楼马晓峰的帖子

好的。谢谢提供的Demo。
你的问题我们收到了,测试后给你反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-10 14:28:00
5#
回复 3楼马晓峰的帖子

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

针对标准控件,建议在主contextmenustrip中加一个Opening事件,然后在一个全局变量中保存主contextmenustrip的sourcecontrol,然后在子级的事件中就可以调用该变量来取主菜单的sourcecontrol。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
马晓峰
初级会员   /  发表于:2015-10-10 14:52:00
6#
回复 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控件

            }
        }
    }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
马晓峰
初级会员   /  发表于:2015-10-10 14:54:00
7#
回复 5楼Alice的帖子

如果还是不行,能否提供 #5#楼方法 的相关代码,供参考。谢谢
回复 使用道具 举报
马晓峰
初级会员   /  发表于:2015-10-10 14:55:00
8#
回复 5楼Alice的帖子

我刚刚试了,在主菜单的opening事件中也不能获得sourcecontrol,是否是一个bug??
回复 使用道具 举报
马晓峰
初级会员   /  发表于:2015-10-10 15:00:00
9#
回复 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
10#
回复 5楼Alice的帖子

忽然想起今天是周末,您辛苦了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部