2011-05-01 1 views
2

Je suis un étudiant sans grande expérience de vb.net et j'ai besoin d'aide pour un projet personnel. J'essaye d'augmenter la taille d'un contrôle multiligne de texte pour que je puisse insérer plusieurs lignes pendant l'exécution. Je veux aller à une nouvelle ligne dans ma zone de texte après avoir appuyé sur Entrée. En même temps, j'essaie de générer une liste déroulante à côté de chaque ligne de textbox créée en appuyant sur Entrée. Voici le code que j'ai jusqu'à présent:Problèmes lors de la modification de multilbox pendant l'exécution vb.net

Private Sub ThisTextBox_keypress(ByVal sender As System.Object, ByVal e As KeyPressEventArgs) Handles ThisTextBox.KeyPress 

    Dim TextboxLine As String() = ThisTextBox.Text.Split(vbNewLine) 
    Dim Linecount As Integer = TextboxLine.Count 
    If e.KeyChar = Chr(Keys.Enter) Then 
     Me.ThisTextBox.Height = TextRenderer.MeasureText(" ", Me.ThisTextBox.Font).Height * _ Linecount 
     For Each Item In TextboxLine 
      Dim newCombobox = New ComboBox() 
      Me.Controls.Add(newCombobox) 
      newCombobox.Items.Insert(0, "Item 1") 
      newCombobox.Items.Insert(1, "Item 2") 
      newCombobox.Items.Insert(2, "Item 3") 
      newCombobox.Items.Insert(3, "Item 4") 

      newCombobox.Location = New System.Drawing.Point(108, 69+=27) 
      newCombobox.Size = New System.Drawing.Size(92, 21) 

     Next 
    End If 


End Sub 

Le problème est la zone de texte augmente sa hauteur avec chaque caractère de type I en elle, et quand je frappe entrer, la hauteur de commande augmente par incréments étranges qui ne peuvent pas être liés à la police de texte * nombre de lignes. En outre, mon code peut être loin sur la façon de créer une liste déroulante pendant l'exécution et le définir à un emplacement spécifique, mais j'espère que vous êtes en mesure de voir ce que je suis en train de faire. Merci d'avance.

Répondre

1

Question intéressante. Le code suivant réalise presque ce que vous voulez, mais placer une liste déroulante à côté de chaque ligne de texte pose des problèmes car il n'y a pas assez d'espace pour rendre la combobox assez grande.

Private Sub ThisTextBox_keypress(ByVal sender As System.Object, ByVal e As KeyPressEventArgs) Handles ThisTextBox.KeyPress 
    Static previousLineCount = 0 
    Dim LineCount As Integer = ThisTextBox.Lines.Count 
    If LineCount > previousLineCount Then 

     Dim lineHeight As Integer = TextRenderer.MeasureText(" ", Me.ThisTextBox.Font).Height 
     ThisTextBox.Height = lineHeight * LineCount + 10 
     For Each Item In ThisTextBox.Lines 
      Dim newCombobox = New ComboBox() 
      Me.Controls.Add(newCombobox) 
      newCombobox.Items.Insert(0, "Item 1") 
      newCombobox.Items.Insert(1, "Item 2") 
      newCombobox.Items.Insert(2, "Item 3") 
      newCombobox.Items.Insert(3, "Item 4") 

      newCombobox.Location = New System.Drawing.Point(ThisTextBox.Left + ThisTextBox.Width, ThisTextBox.Top + (LineCount) * lineHeight - 12) 
      newCombobox.Size = New System.Drawing.Size(92, lineHeight) 

     Next 
    End If 
End Sub 

Je ne suis pas au courant d'une façon de changer la hauteur d'un contrôle combobox (quelqu'un d'autre ici pourrait savoir si vous pouvez) mais il va regarder drôle de toute façon.

Vous pouvez également utiliser un contrôle RichTextBox et modifier l'interligne.

Espérons que le code ci-dessus vous aide à démarrer quand même.

+0

Merci, cela a été très utile, je vais le modifier pour essayer de garder les contrôles de la zone de liste déroulante se chevauchent les uns les autres avec chaque ligne ajoutée dans la zone de texte. Je pourrais même juste changer les méthodes d'entrée d'une boîte de texte à quelque chose d'autre. Merci –

Questions connexes