这个问题几年来一直困扰着我。
我们在项目中使用派生的Windows窗体组件和控件。例如,我们派生自Button,UserControl等。
我们的派生Button上有一些自定义属性。例如,它有一个名为Severity的枚举属性。此属性的setter查看枚举值,并在基本Button上设置文本颜色和边框等内容。
这很有用......但是我们的用户控件将此按钮放在他们的设计器上并在“属性”窗口中设置Severity的值,最后实际上将Severity属性在setter中执行的代码写入User Control的按钮本身。
我们不希望这样......它违背了拥有共享Severity属性的目的,因为我们无法再更改Severity的实现,也不会全局应用更改,因为User Controls自己设置了严重性属性及其拖动到控件上时包含的代码...
我已尝试添加类似DesignerSerializationVisiblity等属性,但这似乎永远不会产生预期效果。
如何防止Windows窗体设计器在严重性属性的实现中生成代码?
感谢。
答案 0 :(得分:2)
我遇到了类似WinForms的问题,其中表单在设计器中运行代码。为了解决这个问题,我创建了一个静态方法,检查Visual Studio是否是主进程并将其包装在设计者应该忽略的代码中。
<强> VB.Net 强>
Imports System.Diagnostics
Public Shared Function IsVisualStudioHostProcess() As Boolean
Return (Process.GetCurrentProcess().ProcessName.ToUpper() = "DEVENV")
End Function
Public Sub MethodName()
If Not (IsVisualStudioHostProcess()) Then
' Code here
End If
End Sub
C#
Using System.Diagnostics;
public static bool IsVisualStudioHostProcess()
{
return (Process.GetCurrentProcess().ProcessName.ToUpper() == "DEVENV");
}
public void MethodName()
{
if (!IsVisualStudioHostProcess())
{
// Code Here
}
}