| |
VB.NET - Ein- und UmsteigerRe: Auf einem Formular - Dynamisch erzeugte UserControls setzen | | | Autor: haesaet | Datum: 15.10.10 11:28 |
| Hi,
danke für die fixe Antwort.
Ja das mit dem Code gefiel mir auch nicht wirklich.
ich werd mal schauen wie ich deine Lösung realisiert bekomme.
Danke fürs erste | |
Auf einem Formular - Dynamisch erzeugte UserControls setzen | | | Autor: jasmina | Datum: 01.10.10 11:46 |
| Hallo,
ich arbeite mit VB2008.
In meinem Projekt befindet sich ein Formular.
In diesem Projekt befindet sich ein weiteres Projekt - ein Usercontrol (Projektname: MenueLeiste)
(Usercontrolname: usrLeiste)
Auf das UserControl werden dynamisch Group-Boxen und darin befindliche Textboxen aufgebaut.
Bei einer bestimmten Gesamtbreite der Group-Boxen soll ein dynamisch ein weiteres UserControl aufgebaut werden.
Die UserControls sollen (können ja mehr als eins sein) Dynamisch auf das Formular gestellt werden.
Meine Idee:
Also im Usercontrol benutze ich eine Dynamisch Erweiterbare Tabelle z.B usrContTab() as usercontrol.
Dim X As Integer = usrContTab.Count - 1
'Dynamische Erweiterung der UserControls
If usrContTab(0) Is Nothing Then ReDim usrContTab(0) Else X = X + 1 : ReDim Preserve usrContTab(X)
usrContTab(X) = New Usercontrol
With usrContTab(X)
.Parent = ?????
Was soll ich als Parent eintragen??
oder wie ist das zu machen?
darauf stelle ich die GroupBoxen je nach Weite der GroupBoxen, muss ich wenn die Weite des userContTab(0) erfüllt ist, dynamisch ein weiteres UserControl erzeugen.
2.Problem
Wie definiere ich im Hauptformular, die dynamisch erzeugten UserControls - bzw. wie erzeuge ich eine
Dynamik, bei der ich ein oder mehrere Usercontrols auf dem Formular?
Wird im Hauptformular ein Dynamisches Array festgelegt, indem ich aus einem Property die Anzahl der zu erstellten UserControls übergeben wird - und wie macht man das?
Danke | |
Re: Auf einem Formular - Dynamisch erzeugte UserControls setzen | | | Autor: haesaet | Datum: 15.10.10 10:29 |
| Hallo,
ich verstehe nicht ganz was du da beschreibst, aber ich vermute du möchtest eine Tabelle dynamisch mit Controls befüllen.
Mit diesem Thema beschäftige ich mich im Moment.
Ich möchte mir einen Formulareditor erstellen mit dem ich mir ein Formular basteln kann.
Dieser Editor soll neue Formulare voll flexibel erstellen und bereits bestehende Formulare laden und bearbeiten können.
Frage(txtbox)|Antwortanzahl(combbox)|Grpbox mit chkboxen|chkbox ob Frage Aktiv
Ich habe mir ein paar Datensätze erstellt um das laden einer Tabelle zu testen.
Ich lade die Daten aus 2 Tabellem ,TbFrage und tbAntworten, und lese diese mit dem Datareader aus.
Das laden und dynamische erzeugen der Tabelle funktioniert einwandfrei aber ich komme jetzt nicht weiter.
Ich möchte z.B. einen Fragenkatalog mit dieser Methode erstellen, aber:
Wie greife ich beim speichern auf die jeweiligen dynamisch erstellten Controls mit den dazugehörigen values zu?
Für das erzeugen von chkboxen in der Groupbox abhängig der Mengenauswahl aus der combobox benötige ich auch noch eine Lösung.
Ich kann zwar auf die Combobox und Value über den EventHandler zugreifen. Aber wie sag ich dem Control wo er die neuen Contrals generieren soll.
Code im 2. Post
Puh, ich hoffe ihr versteht was ich meine....Ich bin noch ziemlich neu in der Materie und unsicher mit der Wortwahl.
Und Jasmina, vielleicht bringt dich ja mein Ansatz irgendwie weiter | |
Re: Auf einem Formular - Dynamisch erzeugte UserControls setzen | | | Autor: haesaet | Datum: 15.10.10 10:33 |
| Dim conString As String
Dim cmd As New MySqlCommand
Dim conn As New MySql.Data.MySqlClient.MySqlConnection
Dim objDaten As MySqlDataReader
conString = "server=localhost;" _
& "uid=xxxxxx;" _
& "pwd=xxxxx;" _
& "database=xxxxx;"
conn.ConnectionString = conString
Try
conn.Open()
cmd.Connection = conn
cmd.CommandText = "select * from tbFragen as f left join" & _
"tbantworten as a on (f.FrageID = a.FrageID);"
objDaten = cmd.ExecuteReader()
objDaten.Read()
Try
If objDaten.HasRows Then
' Feststellen und speichern der Zeilenanzahl
Dim y = Me.Tabel1.RowCount - 3
'Spalte wo die Controls mit Antworten enstehen
Dim c = 2
Do
Dim FrageID1 = objDaten.Item("FrageID")
If Not FrageId = FrageID1 Then
'Spalte in die eine Textbox eingefügt wird
c = 2
'Neue Zeile erstellen
y += 1
'Erzeugen eines Objektes und speichern in eine
' Variable
Dim tb1 = New Windows.Forms.TextBox()
'Einfügen des Objektes in in Spalte x und Zeile y
Tabel1.Controls.Add(tb1, 0, y)
tb1.Text = objDaten.Item("Frage")
tb1.Width = 400
Dim optA = objDaten.Item("AntwortAnzahl")
Dim comb1 = New Windows.Forms.ComboBox()
Tabel1.Controls.Add(comb1, 1, y)
' Ich lasse nur max 8 Antworten zu..Mehr ergeben sich nicht
' für meinen Bedarf
For i = 0 To 8
comb1.Items.Add(i)
Next
comb1.SelectedItem = optA
'erstellt einen EventHandler für die Combobox
AddHandler comb1.SelectedIndexChanged, AddressOf _
DynamicClick
'Fragen die keine vorgegebenen Antworten haben
' bekommen eine Textbox generiert
If optA = 0 Then
Dim Textbox = New Windows.Forms.TextBox()
Tabel1.Controls.Add(Textbox, c, y)
Tabel1.SetColumnSpan(Textbox, 4)
Textbox.Width = 500
Else
Dim Textbox = New Windows.Forms.TextBox()
Tabel1.Controls.Add(Textbox, c, y)
If objDaten.Item("Antwort") Is DBNull.Value Then
Textbox.Text = ""
Else
Textbox.Text = objDaten.Item("Antwort")
End If
End If
Dim cb As New Windows.Forms.CheckBox()
Tabel1.Controls.Add(cb, Tabel1.ColumnCount, y)
'Setze Wert von FrageId1 auf FrageId
FrageId = FrageID1
Else
c += 1
'Abfrage ob Spalte größer oder gleich 5, wenn ja
' neue Zeile erstellen
If c >= Tabel1.ColumnCount - 1 Then
y += 1
c = 2
End If
Dim tba = New Windows.Forms.TextBox()
Tabel1.Controls.Add(tba, c, y)
If objDaten.Item("Antwort") Is DBNull.Value Then
tba.Text = ""
Else
tba.Text = objDaten.Item("Antwort")
End If
End If
Loop Until objDaten.Read() = False
Else
MsgBox("No rows returned.")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
objDaten.Close()
Catch ex As MySql.Data.MySqlClient.MySqlException
MessageBox.Show(ex.Message)
End Try | |
Re: Auf einem Formular - Dynamisch erzeugte UserControls setzen | | | Autor: FZelle (Moderator) | Datum: 15.10.10 11:13 |
| 1. Alles in eine Funktion zu packen nennt sich Spagettiecode, und sowas lässt sich nicht warten.
Als Faustformel gilt, mehr als ca 40 Zeilen ( 25 bei anderen nicht so geschwätzigen sprachen ) sollte man nicht in eienr Funktion haben.
2. Das Aufbewaren der Daten in den Controls ist der falsche weg, es gibt da extra DataBinding für.
3. Und das hilft dir dann auch die frage des Datenholens aus den Controls zu erledigen, nämlich man macht es nicht.
4. Wenn du dynamisch etwas aufbaust, merke es dir selber in z.b. Dictionary(of)
5. Sinnvoller als da jetzt wohlmöglich hunderte von Zeilen zu erzeugen ist es Links ein Grid/ListView anzuzeigen und rechte daneben dann die Details in Text/Check/Radio was auch immer.
Private FragenDataTable as DataTable
Private FragenBinder as New BindingSource
..
Dim adapter as new MySqlDataAdapter("select * from tbFragen as f left join" & _
"tbantworten as a on (f.FrageID = a.FrageID);", connectionString )
FragenDataTable = new DataTable("Fragen")
adapter.Fill(FragenDataTable)
FragenBinder.DataSource = FragenDataTable | |
Re: Auf einem Formular - Dynamisch erzeugte UserControls setzen | | | Autor: jasmina | Datum: 15.10.10 15:39 |
| Hallo,
meine Frage ist:
In einem Formular trifft der Benutzer eine Auswahl welche Ausgaben in der MenüLeiste angezeigt werden sollen.
In einer DLL benutze ein UserControl um die die Auswahlfelder aneinandergereiht anzeigen zu können.
Die Auswahlfelder haben unterschiedliche Breite der Ausgabefelder. Deshalb dürfen nur eine bestimmte Anzahl der Auswahlfelder auf der Menüleiste zu sehen sein.
Ist die Menüleiste voll (Breite erreicht) -
soll dynamisch ein weiteres UserControl mit den nächsten Auswahlfeldern bestückt werden.
Beim Programmaufruf werden als erstes die UserControl mit den UserControls erzeugt, und anschließend im Programm als Menüleiste untereinander angezeigt.
Wie kann ich die UserControls dynamisch erzeugen und dann im Programm einbinden?
Danke | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|