2016-04-12 3 views
0

Un contrôle de la mienne a une propriété List<Point> qui doit être définie lorsque ce contrôle est construit. Les Point individuels doivent provenir de clics de souris sur le formulaire et cela doit se produire dans le mode Création de Visual Studio. Maintenant, mon idée était d'ouvrir un nouveau formulaire à chaque fois que ce contrôle est créé, ce qui dupliquerait le formulaire original, et sur le nouveau formulaire je pourrais cliquer sur un bit, enregistrer les points, les ajouter à la liste et fermer le nouveau Forme quand j'ai fini. Mais je ne peux pas sembler appliquer les propriétés originales de Formulaires au nouveau et je suppose que c'est parce que cela ne se produit pas pendant l'exécution.Définition d'une propriété personnalisée d'un contrôle personnalisé via la souris sur Form (dans DesignMode)

C'est ce que j'ai jusqu'à présent (je sais que ce n'est pas beaucoup, son sur le principe):

Afficher un nouveau formulaire lorsque la commande est créé:

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

Le nouveau formulaire :

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 

Aucune hauteur à jour, la largeur ou la couleur d'arrière-plan pour être vu sur la nouvelle forme ... Une idée?

+0

Essayez 'Me.Refresh()' après avoir défini Height, Width et BackColor. Si cela ne fonctionne toujours pas, ajoutez 'Application.DoEvents()'. Ou ajoutez une variable de classe 'ScrSource' dans votre SoruceForm et définissez-la dans le constructeur. Mais au lieu d'ajuster les propriétés dans le constrcutor, définissez Height, Width et BackColor dans l'événement 'Load' de SoruceForm. –

+0

Tout d'abord, cela ressemble à un UserControl et non à un contrôle personnalisé. Si vous définissez correctement la propriété 'List (Of Point)', VS/IDE lancera l'éditeur de collection pour vous. – Plutonix

+0

@ Alex B. a fait tout ce que vous avez suggéré, mais cela ne fonctionne toujours pas. @ Plutonix Désolé, je ne savais pas qu'il y avait une différence entre les deux. Il me montre en effet l'éditeur de collection, mais cet éditeur n'effectue pas ce dont j'ai besoin (enregistrement de points par clic de souris). Merci pour votre aide de toute façon! – ziggystardust

Répondre

0

Juste pour l'amour de la documentation:

On dirait que j'ai réussi à résoudre mon problème. J'ai essayé beaucoup de choses différentes, mais je crois que la création de la nouvelle Form dans le Load event du control l'a résolu à la fin. La méthode Refresh() a également aidé.

Voici donc le code de travail. Pour le contrôle:

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 

Pour la nouvelle classe 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: les fautes de frappe.