editor 右键菜单
是这样的我现在不想用editor自带的右键菜单contextMenuStrip,自己写了一个右键菜单叫contextMenuStrip4,contextMenuStrip4有一个菜单项----删除,当点击了删除后我想获得contextMenuStrip4.SourceControl,应当为editor类型,但是一直系那是为null,怎么回事?求教 回复 1楼马晓峰的帖子
谢谢对该问题的反馈。
无法模拟你的场景,请提供一个重现的Demo,我们帮你看看。 回复 2楼Alice的帖子
这是我写的一个demo,当在editor上右键【删除】,程序崩溃, contextMenuStrip1.SourceControl为null,求指教 回复 3楼马晓峰的帖子
好的。谢谢提供的Demo。
你的问题我们收到了,测试后给你反馈。 回复 3楼马晓峰的帖子
你好。
ContextMenuScrip是微软的标准控件,contextmentstrip(二级菜单)通过owner获取了父级contextmenustrip的SourceControl会是null。(你将C1Editor替换成其他的标准控件,也是同样的结果)
针对标准控件,建议在主contextmenustrip中加一个Opening事件,然后在一个全局变量中保存主contextmenustrip的sourcecontrol,然后在子级的事件中就可以调用该变量来取主菜单的sourcecontrol。 回复 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控件
}
}
} 回复 5楼Alice的帖子
如果还是不行,能否提供 #5#楼方法 的相关代码,供参考。谢谢 回复 5楼Alice的帖子
我刚刚试了,在主菜单的opening事件中也不能获得sourcecontrol,是否是一个bug?? 回复 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 = "fgd";
} 回复 5楼Alice的帖子
忽然想起今天是周末,您辛苦了
页:
[1]
2