2016-04-12 4 views
0

. Управление шахты имеет свойство List<Point> как свойство, которое необходимо установить при создании этого элемента управления. Лицо Point должно быть взято из щелчков мышью по форме, и это должно произойти в Designmode Visual Studio.Настройка настраиваемого свойства настраиваемого элемента управления с помощью мыши. Нажмите на форму (в DesignMode).

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

Это то, что я до сих пор (я знаю, что это не так много, его о принципе):

Отображение новой формы, когда создается элемент управления:

Public Sub New() 
     InitializeComponent() 
     Dim myForm As Form = Me.FindForm() 
     Dim newForm As New newForm(myForm) 
     scrInput.Show() 
    End Sub 

Новая форма :

Public Class SourceForm 
    Private additionlHeight As Integer = 50 

    Public Sub New(ScrSource As Form) 
     InitializeComponent() 
     Me.Height = ScrSource.Height + additionlHeight 
     Me.Width = ScrSource.Width 
     Me.BackColor = ScrSource.BackColor 
    End Sub 
End Class 

Нет обновленной высоты, ширины или цвета фона для новой формы. Любая идея?

+0

Попробуйте 'Me.Refresh()' после установки Height, Width и BackColor. Если это еще не работает, добавьте 'Application.DoEvents()'. Или добавьте переменную класса 'ScrSource' в вашу SoruceForm и установите ее в конструкторе. Но вместо настройки свойств в constrcutor установите значение Height, Width и BackColor в событии 'Load' SoruceForm. –

+0

Во-первых, это выглядит как UserControl, а не пользовательский элемент управления. Если вы правильно определите свойство «List (Of Point)», VS/IDE запустит для вас редактор коллекций. – Plutonix

+0

@ Alex B. сделал все, что вы предложили, но он все еще не работает. @ Plutonix Извините, я не знал, что есть разница между ними. Он действительно показывает мне редактор коллекций, но этот редактор не выполняет то, что мне нужно (регистрируя точки за mouseclick). Спасибо за вашу помощь в любом случае! – ziggystardust

ответ

0

Просто ради ДОКУМЕНТАЦИЯ по:

Похоже, мне удалось решить мою проблему. Я пробовал много разных вещей, но я считаю, что создание нового Form в Load eventcontrol решило его в конце. Метод Refresh() также помог.

Итак, вот рабочий код. Для контроля:

Private Sub myControl_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Dim myForm As Form = Me.FindForm() 
     Dim controlInputForm As New myControlInputForm(myForm) 
     controlInputForm.Show() 
End Sub 

Для нового класса Form:

Public Class myControlInputForm 

     Private additionlHeight As Integer = 50 
     Private sourceForm As Form 

     Public Sub New(sourceForm As Form) 
      InitializeComponent() 

      Me.sourceForm = sourceForm 

      Me.Height = Me.sourceForm.Height + additionlHeight 
      Me.Width = Me.sourceForm.Width 
      Me.BackColor = Me.sourceForm.BackColor 

      Me.Refresh() 
     End Sub 
End Class 

EDIT: опечаток.

Смежные вопросы