Свойства пользовательского дизайна Windows Forms - PullRequest
1 голос
/ 27 мая 2011

Это вопрос, который мучил меня в течение нескольких лет.

Мы используем производные компоненты и элементы управления Windows Forms в нашем проекте. Например, мы получили из Button, UserControl и т. Д.

Наша производная кнопка имеет некоторые пользовательские свойства. Например, у него есть свойство enum с именем Severity. Установщик для этого свойства просматривает значение перечисления и устанавливает некоторые вещи, такие как цвет текста и границы и тому подобное, на базовой кнопке.

Это прекрасно работает ... НО наши пользовательские элементы управления, которые помещают эту кнопку в свой конструктор и устанавливают значение для серьезности в окне свойств, в итоге фактически записывают код, который свойство Severity выполняет в установщике, для самой кнопки пользовательского элемента управления. ,

Мы не хотим, чтобы ... это противоречило цели обладания общим свойством Severity, потому что мы больше не можем изменять реализацию Severity, и оно не будет глобально применять изменения, потому что пользовательские элементы управления сами устанавливают Свойство серьезности И код, который оно содержало, когда его перетаскивали на элемент управления ...

Я пытался добавить такие атрибуты, как DesignerSerializationVisiblity и тому подобное, но, похоже, это никогда не дало желаемого эффекта.

Как запретить разработчику Windows Forms генерировать код ВНУТРИ реализации свойства Severity?

Спасибо.

1 Ответ

2 голосов
/ 27 мая 2011

У меня была похожая проблема с 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...