Windows窗体自定义设计属性

时间:2011-05-27 13:48:15

标签: .net winforms windows-forms-designer

这个问题几年来一直困扰着我。

我们在项目中使用派生的Windows窗体组件和控件。例如,我们派生自Button,UserControl等。

我们的派生Button上有一些自定义属性。例如,它有一个名为Severity的枚举属性。此属性的setter查看枚举值,并在基本Button上设置文本颜色和边框等内容。

这很有用......但是我们的用户控件将此按钮放在他们的设计器上并在“属性”窗口中设置Severity的值,最后实际上将Severity属性在setter中执行的代码写入User Control的按钮本身。

我们不希望这样......它违背了拥有共享Severity属性的目的,因为我们无法再更改Severity的实现,也不会全局应用更改,因为User Controls自己设置了严重性属性及其拖动到控件上时包含的代码...

我已尝试添加类似DesignerSerializationVisiblity等属性,但这似乎永远不会产生预期效果。

如何防止Windows窗体设计器在严重性属性的实现中生成代码?

感谢。

1 个答案:

答案 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
    }
}