阻止设计器删除控件成员上的属性
本文关键字:成员 属性 控件 删除 | 更新日期: 2023-09-27 18:21:06
我想用属性标记Windows窗体上的某些控件。所以我在TestAttributes.Designer.cs
:中添加了属性
[AmbientValue(true)]
private System.Windows.Forms.Label label1;
但是,每当我使用设计器的属性窗口更改label1的Modifiers
-属性时,设计器都会悄悄地从声明中删除我的属性:
public System.Windows.Forms.Label label1;
我尝试将声明放在TestAttributes.cs
中,以避免与.Designer.cs文件发生冲突。但是,当更改Modifiers
属性时,声明将移回TestAttributes.Designer.cs
,Attribute也将消失。
如何阻止设计器删除我的属性?
编辑:问题应该是:我是否可以永久地将控件的声明移出*.Designer.cs
文件,以便在那里应用Attribute?正如我在上面所写的,在某些情况下,它会向后移动。
谢谢!richn
如果您想保持对设计器的支持,我建议您使用外部类库。
namespace ClassLibrary1
{
[System.ComponentModel.AmbientValue(true)]
public class TestClass : System.Windows.Forms.Label
{
}
}
您可以将类似的内容编译到类库中,然后将其导入visualstudio。如果你不知道如何做到这一点,请按照下面的说明进行操作。
- 右键单击工具箱
- 单击"选择项目"
- 等等。现在不要犯终止visualstudio的错误
- 选择浏览
- 选择您的dll文件
我通常不喜欢那些给出"不要做"答案,但不要做的人。
更改设计器类是危险的,并且几乎总是会导致意外的后果。设计器代码是为编译器保留的,它应该始终看起来像编译器期望的那样。
如果你真的想在原本应该是你的设计器代码中使用属性,那么你应该制作一个空的应用程序,并自己编写表单代码。无论如何,如果你不知道如何从头开始,你就不应该试图修改设计器代码
如果这看起来工作量很大,您可以尝试将设计器用作模型,然后将其复制到一个新的非windows窗体项目中。
Untill最近我被引导相信设计器只是代码的一部分,它是不可触碰的。我错了。事实证明,你可以把整个东西撕下来,然后编译器会向你抛出一个错误。好吧,没关系,只要定义你自己的东西,这样就完全消除了设计师的必要性。以下是如何操作。假设你有一个标签
<div id="div1" runat="server">
并且您希望在没有任何designer.cs文件的情况下使其在背面不可见(我们删除了它)。首先将它与其他声明一起引用(即page_load之外,外部的某个地方)
protected System.Web.UI.HtmlControls.HtmlGenericControl div1;
但是,请记住,您必须引用前面使用的带有runat="server"标记的所有内容。假设你有一个页面只有runat="server"标签,在背面我们称之为
namespace yournamespace.something
{
public class yourpagetitle: System.Web.UI.Page
{
protected System.Web.UI.WebControls.Image imgLogo;
protected System.Web.UI.WebControls.TextBox tbDate;
protected System.Web.UI.WebControls.Label yourLabelName;
请注意,我添加了图像和文本框作为附加示例。还有胡扎!因此,您完全不需要designer.cs文件。哦,请注意,designer.cs文件只不过是我们上面所做的,但它会自动为您提供。。。大多数时候。。。当它失败时,是时候用自己的方式处理事情了。我相信,如果你重新格式化你的电脑,重新安装所有东西,等等,毫无疑问,一切都会恢复正常。对于那些没有时间照顾和解决微软每一个小问题的人来说,这只是一个合理的解决方案。