嗨,这是我在这里发表的第一篇文章,为不好的英语道歉。
我有很多类都有一个必须重新定义运行时的方法。 以下代码运行正常:
public interface Interface1
{
Action MyCustomAction { get; set; }
}
public class Class1 : Interface1
{
private Action _myCustomAction;
public Action MyCustomAction { get => _myCustomAction==null?delegate() { }:_myCustomAction; set => _myCustomAction = value; }
public void DoStuff()
{
//do a lot of stuff, then call:
MyCustomAction();
}
}
很好,我可以这样做:
Class1 c1 = new Class1();
c1.MyCustomAction = delegate () { Console.WriteLine("I successfully redefined the custom action inside a " + c1.ToString()); };
c1.DoStuff();
并且快乐。
但现在出现问题,请检查以下内容:
public interface Interface1
{
Action MyCustomAction { get; set; }
}
public partial class Class1: UserControl, Interface1
{
private Action _myCustomAction ;
public Action MyCustomAction { get => _myCustomAction == null ? delegate () { }: _myCustomAction; set => _myCustomAction = value; }
public UserControl1()
{
InitializeComponent();
}
public void DoStuff() {
//do a lot of stuff, then call:
MyCustomAction();
}
}
除了Class1之外,同样的事情是UserControl 现在,当我将一个Class1用户控件从工具栏拖放到主窗体中时...砰! Visual Studio 2017中出现错误..
严重级代码描述项目文件行抑制状态 错误无效的Resx文件。无法加载.RESX文件中使用的类型WindowsFormsApp2.UserControl1 +<> c,WindowsFormsApp2,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null。确保已将必要的引用添加到项目中。第142行,第5行.WindowsFormsApp2 C:\ Users \ tara \ source \ repos \ WindowsFormsApp2 \ WindowsFormsApp2 \ Form1.resx 142
并且在主要形式resx现在出现了许多像这样的奇怪代码
<data name="userControl11.MyCustomAction" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEdXaW5kb3dzRm9ybXNBcHAyLCBWZXJzaW9uPTEuMC4wLjAsIEN1
bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAIlN5c3RlbS5EZWxlZ2F0ZVNlcmlh
bGl6YXRpb25Ib2xkZXIDAAAACERlbGVnYXRlB3RhcmdldDAHbWV0aG9kMAMEAzBTeXN0ZW0uRGVsZWdh
dGVTZXJpYWxpemF0aW9uSG9sZGVyK0RlbGVnYXRlRW50cnkhV2luZG93c0Zvcm1zQXBwMi5Vc2VyQ29u
dHJvbDErPD5jAgAAAC9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRl
cgkDAAAACQQAAAAJBQAAAAQDAAAAMFN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xkZXIrRGVs
ZWdhdGVFbnRyeQcAAAAEdHlwZQhhc3NlbWJseQZ0YXJnZXQSdGFyZ2V0VHlwZUFzc2VtYmx5DnRhcmdl
dFR5cGVOYW1lCm1ldGhvZE5hbWUNZGVsZWdhdGVFbnRyeQEBAgEBAQMwU3lzdGVtLkRlbGVnYXRlU2Vy
aWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5BgYAAAANU3lzdGVtLkFjdGlvbgYHAAAAS21zY29y
我从表单中删除用户控件,错误消失 我添加了用户控件,它再次出现。 我很困惑,我不知道为什么会发生这种情况......以及如何修复
答案 0 :(得分:0)
您只需将此属性添加到您的媒体资源中:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
这告诉WinForms设计器不应将该属性保存到代码生成的文件中。
MSDN:
指定属性对设计时序列化程序的可见性
代码生成器不会为对象生成代码
此外,您可能希望添加[Browsable(false)]
,以便设计器中根本看不到它。它可能不会影响代码生成,但可以说没有任何一点可以显示其类型无法更改的属性(delegate/Action
)。
所以:
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Action MyCustomAction
{
get => _myCustomAction == null ? delegate () { }: _myCustomAction;
set => _myCustomAction = value;
}