gpt4 book ai didi

c# - 将自定义动词添加到 ToolStrip 设计器,而无需重新实现 ToolStripDesigner

转载 作者:行者123 更新时间:2023-11-30 23:24:41 25 4
gpt4 key购买 nike

我正在开发一个自定义 ToolStrip 来替换我想兼作菜单栏的窗体的标题栏。我想要做的是将动词添加到 ToolStrips 动词菜单,这将添加标准菜单项,例如文件、编辑。

我可以通过 Custom ControlDesign 来做到这一点,但是添加的项目不会保留在窗体的 InitializeComponent 方法中。此外,我不认为我想使用自定义 ControlDesigner,因为我失去了很多我必须重新实现的功能,而且 ToolStripDesigner 是内部的,所以我不能继承它。

有什么方法可以向 ToolStrips 动词菜单添加类似于插入标准项的选项,而无需重新实现 ToolStripDesigner。

感谢您的帮助丹尼

PS 对不起,如果这有点乱,我已经 2 天没 sleep 了。

最佳答案

ToolStripDesigner 是内部的并且依赖于其他内部类,您不能从它继承。此外,您不应为 ToolStrip 创建新的控件设计器,因为您将失去当前的设计器功能,例如使用设计器添加项目。

一个非常好的技巧是在设计时找到设计器并操纵设计器。

如何在不丢失设计器功能的情况下向 ToolStrip 设计器添加自定义动词?

您可以在设计时找到控件的设计器并对其进行操作。 OnHandleCreated 方法中的一个好点。您可以从控件的 Site 获取 IDesignerHost 的实例,然后获取设计器。然后就可以得到控件的action list集合,添加自定义动词。

/*Add a reference to System.Design.dll*/

using System;
using System.ComponentModel.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;
public class MyCustomToolStrip : ToolStrip
{
private IDesignerHost designerHost;
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
if (this.DesignMode && Site != null)
{
designerHost = Site.GetService(typeof(IDesignerHost)) as IDesignerHost;
if (designerHost != null)
{
var designer = designerHost.GetDesigner(this);
if (designer != null)
{
var actionList = ((ControlDesigner)designer).ActionLists[0];
designer.Verbs.Add(new DesignerVerb("My Custom Verb", MyCustomVerb));
}
}
}
}
private void MyCustomVerb(object sender, EventArgs e)
{
MessageBox.Show("My Custom Verb added!");
}
}

关于c# - 将自定义动词添加到 ToolStrip 设计器,而无需重新实现 ToolStripDesigner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37633284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com