Программная настройка свойств времени разработки в элементе управления Windows.Forms - PullRequest
0 голосов
/ 05 февраля 2010

Существует ли простой способ программной установки значения свойства для элемента управления таким образом, чтобы оно сохранялось в сгенерированном дизайнером коде?

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

Редактировать: Да, это было бы то же самое, что редактировать код конструктора вручную, но я хочу сделать это программно.

Ответы [ 4 ]

1 голос
/ 05 февраля 2010

Предполагая, что я понимаю вопрос

Вы можете привязать это свойство к настройке, используя графический интерфейс Visual Studio. Проверьте свойства этого элемента управления в разделе Data для (Application Settings), (Property Bindings).

1 голос
/ 14 сентября 2010

Это зависит от того, какую функциональность вы хотите. Если вам нужно установить свойства только при добавлении элемента управления в форму, тогда установка свойств в конструкторе элемента управления работает отлично. Однако изменения, внесенные с помощью панели «Свойства», будут иметь приоритет, и установка свойств в конструкторе элемента управления не обязательно повлияет на существующие экземпляры элемента управления.

Если вы хотите иметь возможность изменять свойства для экземпляров элемента управления в одном месте, назначение привязок в (настройки приложения), (привязки свойств) работает. Затем вы можете изменить все привязки из файла Settings.settings. Тем не менее, для этого требуется назначить привязки свойств для каждого экземпляра элемента управления.

Теперь для финала. Если вы хотите установить свойства в классе элемента управления, которые влияют на все экземпляры элемента управления, независимо от того, должны ли они быть созданы или уже существуют, вам нужно проявить немного творчества. Я нашел решение, но оно не может быть лучшим. Мое решение выглядит так:

В конструкторе элемента управления для каждого свойства, которое вы хотите установить, вы:

  1. Сохранить желаемое значение в приватной переменной.
  2. Присвойте значение переменной свойству.
  3. Назначьте обработчик событий, который присваивает значение переменной свойству при каждом изменении свойства.

Недостатком является количество кода для каждого свойства. Кроме того, вы не сможете изменить свойства на панели свойств.

0 голосов
/ 15 октября 2011

А как же:

Private Function GetPropertyByName(ByVal propName As String) _
As PropertyDescriptor
    Dim prop As PropertyDescriptor
    prop = TypeDescriptor.GetProperties(l_dWindow)(propName)
    If prop Is Nothing Then
        Throw New ArgumentException( _
        "Matching ColorLabel property not found!", propName)
    Else
        Return prop
    End If
End Function

Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
    GetPropertyByName("AnyPublicProperty").SetValue(AnyControl, "AnyStringVALUE")
    Me.DialogResult = DialogResult.OK
End Sub
0 голосов
/ 05 февраля 2010

Вы думаете о чем-то вроде:

if (this.DesignMode)
{
    // do somthing
}

Если вы поместите это в конструктор, не забудьте вызвать InitializeComponent () раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...