none
Wie platziere ich textboxen in einem UserControl zur Laufzeit ? RRS feed

  • Frage

  • Hallo, vielleicht kann mir jemand helfen. Ich versuche ein Grid selber zu erstellen. Es soll aus einer zur Laufzeit bestimmten Zeilenanzahl bestehen, jedoch immer die selbe Spaltenanzahl. Ich dachte ich mache ein UserControl, dem ich die Prozedur "GeneriereGrid" mit der Anzahl der Zeilen übergebe. Da es sich bei dem Grid aus fast ausschliesslich numerischen Werten handelt, möchte ich zur Laufzeit die von der Textbox abgeleitete Klasse NumericTextbox einfügen, und zwar so dass sich ein Grid ergibt. Leider zeigt mir das UserControl "GridStäbe" dieNumericTextboxen nicht an. Kann mir jemand sagen wo der Fehler liegt. Das UseControl habe ich im Hauptformular eingefügt (aber halt ohne Textboxen, diese sollen ja zu Laufzeit erzeugt werden.

    Hier mein Code des Grids

     

    Imports System.Drawing
    Public Class GridStäbe
        Inherits System.Windows.Forms.UserControl
        Public Sub GeneriereGrid(ByVal Zeilenanzahl As Byte)
            Dim spalte, zeile, counter As Integer

            Dim p As Point
            Dim ntxtbx((Zeilenanzahl * 6) - 1) As numericTextBox
            counter = 0
            For zeile = 1 To Zeilenanzahl
                For spalte = 1 To 6
                    ntxtbx(counter) = New numericTextBox
                    p.X = spalte * 50
                    p.Y = zeile * 20
                    ntxtbx(counter).Location = p
                    ntxtbx(counter).Visible = True
                    counter = +1
                Next spalte
            Next zeile
           
        End Sub
    End Class

     

    Danke sagt rabarberpapa

    Sonntag, 17. Januar 2010 12:16

Antworten

  • Hallo rabarberpapa,

    gibt es ein solches Controll nicht schon?

    Wenn ich dich richtig verstanden habe, dann wäre doch das TableLayoutPanel die richtige Komponente für dich!?

    Gruß
    Holger M. Rößler

    Sonntag, 17. Januar 2010 15:54
  • Hallo Rabarberpapa,

    Kannst du :o)

    Das TableLayoutPanel ist ja dafür gedacht, Controls tabellarisch in einem Container (Form,Panel,GroupBox etc.) anzuordnen.
    Ich hoffe ich konnte dier weiterhelfen!

    Viele Grüße
    Holger M. Rößler
    Montag, 18. Januar 2010 07:33

Alle Antworten

  • habe eine Lösung gefunden:

    Imports System.Drawing
    Public Class GridStäbe
        Inherits System.Windows.Forms.UserControl
        Public Sub GeneriereGrid(ByVal Zeilenanzahl As Byte)
            Dim spalte, zeile, counter, Breite, Höhe As Integer
            Dim p As Point
            Dim ntxtbx((Zeilenanzahl * 6) - 1) As numericTextBox
            counter = 0
            Breite = 55
            Höhe = 20
            For zeile = 0 To Zeilenanzahl - 1
                For spalte = 0 To 5
                    ntxtbx(counter) = New numericTextBox
                    ntxtbx(counter).Top = zeile * 20 + 20
                    ntxtbx(counter).Left = spalte * 55
                    ntxtbx(counter).Width = Breite
                    ntxtbx(counter).Height = Höhe
                    Me.Controls.Add(ntxtbx(counter))
                    counter = +1
                Next spalte
            Next zeile
            Me.AutoScroll = True
        End Sub
    End Class
    Danke trotzdem für Eure Bemühungen
    gruss rabarberpapa

    Sonntag, 17. Januar 2010 13:32
  • Hallo rabarberpapa,

    gibt es ein solches Controll nicht schon?

    Wenn ich dich richtig verstanden habe, dann wäre doch das TableLayoutPanel die richtige Komponente für dich!?

    Gruß
    Holger M. Rößler

    Sonntag, 17. Januar 2010 15:54
  • Hallo Holger,
    mensch, da schau ich gleich mal nach. Ich danke Dir auf jeden Fall für den Rat. Ursprünglich wollte ich das ganze Ding mit einem DataGridview machen, das funktioniert aber nicht, da es immer datengebunden ist, und ich keine Möglichkeit habe mir Defaultwerte anzeigen zu lassen, es sei denn man hat es an eine Master und Child Tabelle gehängt. Ein Teil meiner Daten sind eben nicht Tabellengebunden, da Sie erst vom User eingegeben werden, und v.a. die Anzahl der Zeilen wie gesagt nicht bekannt ist.
    Desweiteren war nämlich auch ein Kriterium, dass ich vom DataGridVIew wegkam, dass der Einbau einer ComboBoxColumn mir zuviel Schwierigkeiten machte.
    Kann ich denn im TbaleLayoutPanel eine Combobox einbauen ?
    Gruss
    Rabarberpapa

    Sonntag, 17. Januar 2010 16:46
  • Hallo Rabarberpapa,

    Kannst du :o)

    Das TableLayoutPanel ist ja dafür gedacht, Controls tabellarisch in einem Container (Form,Panel,GroupBox etc.) anzuordnen.
    Ich hoffe ich konnte dier weiterhelfen!

    Viele Grüße
    Holger M. Rößler
    Montag, 18. Januar 2010 07:33