DesignSurface:无法删除控件
DesignSurface: Can't delete controls
我目前正在从事一个涉及 DesignSurfaces 的项目。
在 Form_load 事件中,我加载了一个包含 3 个文本框、3 个标签和一个按钮的表单。
为了管理这些控件,我有一个 ContextMenuStrip 和包含 StandardCommands
剪切、复制、粘贴和删除的 MenuItems。
但是,当我尝试任何这些操作时,它会抛出一个 InvalidOperationException
类似 "The inherited component 'textBox1' cannot be deleted" 的内容(不幸的是,我没有英文的异常消息,但通过谷歌搜索我发现它可能是这个:"Cannot remove or destroy inherited component")
如果我添加一个控件运行时并尝试删除它,一切正常(也可以剪切、复制、粘贴)。
这是 ContextMenuStrip 的代码:
public void ShowContextMenu( CommandID menuID, int x, int y ) {
ContextMenu contextMenu = new ContextMenu();
MenuCommand command = FindCommand( StandardCommands.Cut );
if( command != null ) {
MenuItem menuItem = new MenuItem( "Cut", new EventHandler( OnMenuClicked ) );
menuItem.Tag = command;
contextMenu.MenuItems.Add( menuItem );
}
command = FindCommand( StandardCommands.Copy );
if( command != null ) {
MenuItem menuItem = new MenuItem( "Copy", new EventHandler( OnMenuClicked ) );
menuItem.Tag = command;
contextMenu.MenuItems.Add( menuItem );
}
command = FindCommand( StandardCommands.Paste );
if( command != null ) {
MenuItem menuItem = new MenuItem( "Paste", new EventHandler( OnMenuClicked ) );
menuItem.Tag = command;
contextMenu.MenuItems.Add( menuItem );
}
command = FindCommand( StandardCommands.Delete );
if( command != null ) {
MenuItem menuItem = new MenuItem( "Delete", new EventHandler( OnMenuClicked ) );
menuItem.Tag = command;
contextMenu.MenuItems.Add( menuItem );
}
DesignSurface surface = (DesignSurface) _serviceProvider;
Control viewService = (Control) surface.View;
if( viewService != null ) {
contextMenu.Show( viewService, viewService.PointToClient( new Point( x, y ) ) );
}
}
private void OnMenuClicked( object sender, EventArgs e ) {
MenuItem menuItem = sender as MenuItem;
if( menuItem != null && menuItem.Tag is MenuCommand ) {
MenuCommand command = menuItem.Tag as MenuCommand;
command.Invoke();
}
}
我想不通这是什么问题。
这里有人遇到过类似的问题吗?或者关于如何解决这个问题的任何想法?
我通过创建一个空表单并手动添加所需的组件解决了这个问题。
我目前正在从事一个涉及 DesignSurfaces 的项目。
在 Form_load 事件中,我加载了一个包含 3 个文本框、3 个标签和一个按钮的表单。
为了管理这些控件,我有一个 ContextMenuStrip 和包含 StandardCommands
剪切、复制、粘贴和删除的 MenuItems。
但是,当我尝试任何这些操作时,它会抛出一个 InvalidOperationException
类似 "The inherited component 'textBox1' cannot be deleted" 的内容(不幸的是,我没有英文的异常消息,但通过谷歌搜索我发现它可能是这个:"Cannot remove or destroy inherited component")
如果我添加一个控件运行时并尝试删除它,一切正常(也可以剪切、复制、粘贴)。
这是 ContextMenuStrip 的代码:
public void ShowContextMenu( CommandID menuID, int x, int y ) {
ContextMenu contextMenu = new ContextMenu();
MenuCommand command = FindCommand( StandardCommands.Cut );
if( command != null ) {
MenuItem menuItem = new MenuItem( "Cut", new EventHandler( OnMenuClicked ) );
menuItem.Tag = command;
contextMenu.MenuItems.Add( menuItem );
}
command = FindCommand( StandardCommands.Copy );
if( command != null ) {
MenuItem menuItem = new MenuItem( "Copy", new EventHandler( OnMenuClicked ) );
menuItem.Tag = command;
contextMenu.MenuItems.Add( menuItem );
}
command = FindCommand( StandardCommands.Paste );
if( command != null ) {
MenuItem menuItem = new MenuItem( "Paste", new EventHandler( OnMenuClicked ) );
menuItem.Tag = command;
contextMenu.MenuItems.Add( menuItem );
}
command = FindCommand( StandardCommands.Delete );
if( command != null ) {
MenuItem menuItem = new MenuItem( "Delete", new EventHandler( OnMenuClicked ) );
menuItem.Tag = command;
contextMenu.MenuItems.Add( menuItem );
}
DesignSurface surface = (DesignSurface) _serviceProvider;
Control viewService = (Control) surface.View;
if( viewService != null ) {
contextMenu.Show( viewService, viewService.PointToClient( new Point( x, y ) ) );
}
}
private void OnMenuClicked( object sender, EventArgs e ) {
MenuItem menuItem = sender as MenuItem;
if( menuItem != null && menuItem.Tag is MenuCommand ) {
MenuCommand command = menuItem.Tag as MenuCommand;
command.Invoke();
}
}
我想不通这是什么问题。
这里有人遇到过类似的问题吗?或者关于如何解决这个问题的任何想法?
我通过创建一个空表单并手动添加所需的组件解决了这个问题。