Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用没有表单的Visual Studio designer_C#_Winforms_Visual Studio - Fatal编程技术网

C# 如何使用没有表单的Visual Studio designer

C# 如何使用没有表单的Visual Studio designer,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我正在使用Visual Studio创建Windows窗体项目 在我的项目的解决方案资源管理器中没有表单类-我动态构建所有表单。因此,我没有机会在VisualStudio中打开设计器或工具箱 但是我想创建一个ContextMenuStrip并在设计器中编辑它。我通常通过将ContextMenuStrip从工具箱拖到设计器上来实现这一点。但是,如果不先创建表单或用户控件,我没有任何方法(我可以说)打开设计器 如何在设计器中编辑ContextMenuStrip而不首先将其与窗体或用户控件关联 我知道

我正在使用Visual Studio创建Windows窗体项目

在我的项目的解决方案资源管理器中没有表单类-我动态构建所有表单。因此,我没有机会在VisualStudio中打开设计器或工具箱

但是我想创建一个ContextMenuStrip并在设计器中编辑它。我通常通过将ContextMenuStrip从工具箱拖到设计器上来实现这一点。但是,如果不先创建表单或用户控件,我没有任何方法(我可以说)打开设计器

如何在设计器中编辑ContextMenuStrip而不首先将其与窗体或用户控件关联

我知道如何在代码中动态生成ContextMenuStrip。那不是我想要的。我想使用设计器创建和编辑ContextMenuStrip,而不必首先将ContextMenuStrip与我不打算包含在项目中的表单或用户控件相关联


(Visual Studio 2013 Pro,如果有必要的话)

我认为这是不可能的,而且我认为在仔细检查下它也没有什么意义

设计器是帮助您构建表单和用户控件的工具。真的是这样。它可以帮助您编写代码以手动创建和打印控件。它提供了基本上是自动代码生成的快捷方式和良好的图形视图


您试图创建的既不是新的
UserControl
类型,也不是新的
Form
类型,这两种类型都可以在设计器中创建。这是一个预先添加了某些内容的菜单条。这不能孤立存在。它需要转换为创建成员并将其添加到具体
ContextMenuStrip
对象的代码。该对象必须存在于某个类中(
Form
UserControl
)。我看不出它是如何独立存在的。

同样的问题。。。新的解决方案

  • 创建用户控件(如UC1)
  • 将ContextMenu作为CC1添加到UC1,并在那里进行设计/编辑
  • 将UserControl添加到项目(或通过代码创建)
  • 请参阅UC1.CC1以了解您现在的“非常有用”上下文菜单

  • 您可以将ContextMenuStrip添加到表单,然后使用代码修改表单,以便使用singleton类型属性访问它:

    public partial class frmContextMenuHost : Form
    {
    
        private frmContextMenuHost()
        {
            InitializeComponent();
        }
    
        private static frmContextMenuHost _frmContextMenu = null;
    
        public static ContextMenuStrip GetContextMenu
        {
            get
            {
                if (_frmContextMenu == null)
                {
                    _frmContextMenu = new frmContextMenuHost();
                }
                return _frmContextMenu.contextMenuStrip1;
            }
        }
    
    }
    

    您打算如何将这些事件用于ContextMenuStrip?

    我不太清楚您的意思-但可能会做您想做的事情-您不能,您需要一个表单或用户控件。@LasseV.Karlsen-因此。。。我在VS中创建一个用户控件,并在设计器中向该控件添加上下文菜单,然后对其进行编辑;然后在我的“动态构建表单”代码中,我实例化了用户控件,不向表单添加用户控件,然后将form.ContextMenuStrip设置为myUserControl.ContextMenuStrip?我不能说这是否可行,我只能说Visual Studio中的设计器不是设计为设计独立控件或组件的,它旨在设计表单和用户控件。我不能告诉您,您是否可以使用未添加到窗体的usercontrol中的contextmenustrip,您只需进行实验。@GrantWiney-窗体是我动态创建的窗口,上面有一个用户控件-一个绘图表面。这就是为什么它们不作为预制类存在的原因。同时,ContextMenuStrip是装饰器类的一部分,不同的使用者将其添加到绘图控件中,以便在不同的时间为其提供不同的功能。Decorator类中没有用户控件,因此除了运行时代码外,无法提供ContextMenuStrip。“我认为仔细检查后这没有意义。”--怀疑提供给我的设计器是否能够帮助我以图形方式编辑我在代码中声明的已知数据结构是没有意义的?我明白为什么建筑商会选择不支持这一点,但我几乎不认为这种愿望“没有意义”。我看到这个问题也被否决了,这也是我无法理解的。如果这是一个不止一个VS用户可能会问的问题,那么这对Stackoverflow有什么用处呢?好吧。Stackoveflow的奥秘还在继续。我认为这是一个非常合理的问题——事实上,我投了更高的票。我所说的“没有意义”是指“不符合设计师的工作方式”。如果我的回答有任何冒犯的地方,请道歉。应该可以,但您必须将CC1的modifiers属性更改为public才能看到它。。。