Перерисовка во время разработки

Я создал пользовательский элемент управления listview. Я настроил его на добавление новой кнопки каждый раз, когда добавляю новый столбец.
Когда я запускаю программу, содержащую мой пользовательский элемент управления, кнопки столбцов размещаются правильно. Однако во время разработки, когда я добавляю или удаляю столбцы, элемент управления не обновляет добавленные кнопки.

Они в порядке во время выполнения, но во время разработки мне нужно закрыть форму и снова открыть ее (принудительно перерисовать), чтобы обновить кнопки столбца.
Как программно принудительно перерисовать мой пользовательский элемент управления?
Свойство Column выглядит следующим образом:

   <MergableProperty(False)> _
   <Editor("System.Windows.Forms.Design.ColumnHeaderCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", GetType(UITypeEditor))> _
   <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
   <Localizable(True)> _
    Public ReadOnly Property Columns() As ListView.ColumnHeaderCollection
        Get
            Return ListView1.Columns
        End Get
    End Property

И я попытался перерисовать элемент управления следующим образом:

   Me.Invalidate()
   Dim x As New Rectangle With {.X = Me.Location.X, .Y = Me.Location.Y, .Size = Me.Size}
   Me.NotifyInvalidate(x)

Но по некоторым причинам он не работает. Во время разработки каждый раз, когда я добавляю столбец, соответствующая кнопка не добавляется.


person rusoaica    schedule 16.05.2013    source источник
comment
Код работает по большей части. Неясно, является ли кнопка тем же, что и заголовок столбца, я предположил, что это так. Я также предположил, что ваш элемент управления загружает элемент управления ListView, а не наследуется от него. Я тестировал на VS2012.   -  person LarsTech    schedule 17.05.2013
comment
да, это правда, я использую элемент управления списком, мой элемент управления просто добавляет несколько кнопок пользовательского стиля в качестве заголовков этого списка... по некоторым причинам они не обновляются в режиме дизайна...   -  person rusoaica    schedule 17.05.2013
comment
Я предлагаю вам отредактировать свой пост, добавив часть этого кода о том, как вы отображаете эти кнопки.   -  person LarsTech    schedule 17.05.2013
comment
Я бы предложил поэкспериментировать с IDesignerHost.Activate() и ISelectionService.SetSelectedComponents().   -  person ezolotko    schedule 04.09.2013


Ответы (1)


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

В Sub, который вы используете для добавления/удаления столбцов, добавьте следующее:

Dim Graphics As Graphics = [yourform].CreateGraphics
Dim ParamArg As New PaintEventArgs(Graphics, [yourform].ClientRectangle)
InvokePaint(Me, ParamArgs)

Это заставит неприятную вещь рисовать себя каждый раз, когда вы добавляете/удаляете.

person Zulluh    schedule 13.09.2015