控件“似乎”被锁定了。

16

我试图更改控件的属性,但它似乎被“锁定”了,但实际上并不是这样,因为当我右键单击控件时,它显示为未锁定。

我正在使用Visual Studio 2005,我从未使用过像提供的图片中那样似乎被锁定的控件。

我希望能得到一个简单的解释和如何解决此问题的方法,以便我可以继续修改它。

输入图像描述


你使用的源代码控制系统是什么? - Oded
1
不是很确定,但可能该控件在其他文件中定义。换句话说,你可以看到持有该控件的主机。 - Tigran
它可能会附加到进程。你是否按F5运行项目,然后切换到VS并尝试编辑控件?如果是这种情况,你需要停止调试器。 - particle
这些控件是放在你的窗体上的UserControl上吗?如果是,那么你必须打开UserControl并更改你想要修改的每个控件上的modifier属性。或者,如果不会影响其他内容,你也可以直接在UserControl本身上进行修改。 - Igby Largeman
7个回答

25

当您尝试设计一个继承窗体,且该窗体上的控件是“私有的”时,就会出现这种情况。设计器观察访问修饰符。回到基础窗体,并将控件的Modifiers属性从Private更改为Protected。


你好,感谢您的回答。不过我还是有点困惑。您所说的基本形式是什么意思?在上面的图像中,bnvNavigator是一个继承自微软BindingNavigator控件的用户控件。我猜您指的回到基本形式并不是修改Microsoft的代码吧?谢谢。 - MPaul
在我的回答中,我假设您从一个不同于Form类的表单继承而来。Project + Add New Item,Windows Forms + Inherited Form。如果不是这种情况,则此答案与您的问题不匹配。要使嵌入在UserControl中的控件可编辑,您需要自定义设计器。请参阅https://dev59.com/YnE85IYBdhLWcg3wbS1h#2863807。但是,我不理解屏幕截图,它看起来不像是UserControl。 - Hans Passant
@HansPassant,这似乎对TableLayoutPanelFlowLayoutPanel都没有任何作用,它们似乎是特殊的。 (我正在设计一个继承另一个包含TableLayoutPanel的用户控件[而不是像您上一条评论中嵌入],无论其可访问性修饰符是PrivateProtected还是Public,它仍然被锁定。) - Bob
1
哦,好吧,MSDN确认TableLayoutPanel控件不支持在Windows Forms Designer中进行可视化继承。派生类中的TableLayoutPanel控件在设计时会显示为“锁定”。 - Bob
1
如果您正在基本控件中使用 TableLayoutPanel,并且想要在继承类中更改某些布局属性,请将 TableLayoutPanel 插入到 Panel 中。当然,Panel 应该具有 protected 修饰符。 - rraszewski
@MPaul 我不会忘记在将修饰符更改为protected后重新构建项目,这会更新“Designer”。 - Simple

5
我遇到了和你一模一样的问题,但是这只发生在DevExpress控件中。
在经过几个小时的修改修饰符以及自残之后,我在Visual Studio => DevExpress => WinForms Controls vX.X.X => Change Design-Time settings => Enable visual inheritance for Developer Express controls used in Visual Studio 中找到了这个选项。
enter image description here

3

在表单上右键单击,取消“锁定控件”选项

这样应该会有所帮助。


当控件被锁定时,您可以在其左上角看到一个小锁。锁定容器也会锁定其中所有的控件。 - Gabriel GM
1
抱歉,但正如我之前所提到的,这些控件并没有被锁定。 - MPaul

0

前往表单解决方案资源管理器的基本代码--> formXX --> Dispose(Boolean),并将继承行更改为 Inherits System.Windows.Forms.Form


0
如果您的项目中有名为“Form.cs”的表单A,其他表单(B、C、D等)的类将从您的“A”继承类“Form.cs”... 它应该继承System.Windows.Forms.Form。只需尝试将A表单的类名从“Form.cs”更改为“Form1.cs”。

0

刚才我在从备份目录中还原 .CS 文件后遇到了类似的问题。无法编辑的原因是因为(备份)文件已经以只读模式创建。 通过资源管理器移除“只读”属性,并在刷新 C# 项目之后,问题得以解决。


0

当您添加新的继承窗体并希望解锁所有控件时,请转到您要继承的窗体,选择Designer.cs文件并将要更改的控件更改为protected。完成后,构建您的解决方案,然后创建继承窗体。控件应该变为解锁状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接