Benutzer mit den meisten Antworten
Zugriff auf Steuerelemente in Usercontrol aus anderer Form

Frage
-
Hallo, ich habe ein Problem .
Ich habe eine Tabcontrol in der bei jedem hinzufügen eines tabs das selbe usercontrol hinzugefügt wird. In jeder usercontrol ist eine z.b. eine textbox, dessen inhalt in eine andere form übertragen werden soll ! !
Bitte um Hilfe!
Danke im Vorraus!
Antworten
-
Ok, so wird das schon um einiges klarer. Wenn du an alle Texte der UserControls heran kommen möchtest brauchst du wie gesagt ersteinmal eine Eigenschaft zum abrufen des Textes im UserControl:
Public Property TextBoxContent() As String Get Return textBox1.Text End Get Set textBox1.Text = value End Set End Property
Dann musst du die Texte nacheinander auslesen. Da Sie alle letzten Endes in eine TB sollen, verknüpfe ich diese mit einem StringBuilder:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim sb As New StringBuilder()
For Each t As TabPage In TabControl1.Controls
sb.AppendLine(DirectCast(t.Controls(0), TextBoxContentControl).TextBoxContent)
sb.AppendLine() 'Leerzeile einfügen
Next
'Gib den Text zurück
Dim result As String = sb.ToString()
End SubNun musst du nur noch den Text zurück geben. Dazu kann man mehrere Wege verwenden. Ich würde eine Eigenschaft in Form2 erstellen, welcher du beim klick auf den Button einen Wert zuweißt. Diesen kannst du dann wieder über eben diese Eigenschaft auselen.
Wenn du einen 2. Wert hast, den du übertragen musst, dann kannst du genauso vorgehen, du musst halt nur neue Namen für die Eigenscaften nehmen.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets- Als Antwort markiert pipsfux3000 Mittwoch, 20. März 2013 16:41
Alle Antworten
-
Hallo,
ich nehme mal an das du WiNForms benutzt. Wenn du einen neuen Tab hinzufügst und dem ein Child gibst, dann musst du ein neues erzeugen, denn jedes mal die selbe Instanz hinzuzufügen, sonst gibt es nur Fehlverhalten in deiner Anwendung. Erzeuge also für jeden Tab eine eigene Instanz des UserControls. Um an die TextBox heran zu kommen musst du eine Eigenschaft in dem UserControl erzeugen, welche den text anruft bzw. setzt. Nun musst du jede Instanz des UserControls als Variable in der Klasse speichern. Auf diese kannst du dann dynamisch zugreifen. Eine Alternative wäre einfach die Tabs durch zu gehen und dann wiedre über die Controls-Eigenschaft die Instanz des UserControsl abzurufen. Ein kleines Beispiel dazu:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim tb As New TextBox() Dim tp As New TabPage() tp.Controls.Add(tb) Me.TabControl1.Controls.Add(tp) End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 'Ruft den ert der TextBox im markierten Tab ab MsgBox(DirectCast(TabControl1.SelectedTab.Controls(0), TextBox).Text) End Sub
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets -
Ähm, wie genau meinst du das? Den Methoden, die ich gepostet habe, ist es egal wie Sie ausgeführt werden. Hauptsache Sie stehen in der richtigen Klasse. Das einzige was zwingend Öffentlich sein muss ist die Text-Eigenschaft im UserControl (Ich nutzt eine normale TextBox). Damit du auch von außerhalb darauf zugreifen kannst.
Wenn es noch nicht so ganz klappt, dann poste mal den Code deiner Versuche.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets -
So sieht es gerade bei mir aus:
In einer Form1 habe ich mehre Buttons:
z.B. Tab hinzufügen und Text speichern
Es können Tabs hinzugefügt werden, in denen immer die gleiche UserControl liegt:
Dim UserControl1 As New UseControl1 With UserControl1 .Dock = DockStyle.Fill .AutoScroll = True End With TabControl1.TabPages.Add("Neuer Tab") TabControl1.SelectedIndex = TabControl1.TabPages.Count - 1 TabControl1.SelectedTab.Controls.Add(UserControl1)
In der UserControl1 liegen verschiedene Steuerelemente z.B. eine TextBox (TextBox1).
Wenn ich nun mehrere Tabs erstellt habe und in die TextBoxen in den verschiedenen Tabs Text hinzugefügt habe, möchte ich nun nacheinander auf den Inhalt der TextBoxen zugreifen und diesen in eine TextBox in der übergeordneten Form einfügen.
Das soll funktionieren, mit egal wie vielen Tabs.
Zudem habe ich in der UserControl1 eine Function, die etwas bestimmtes zurückgibt. Vorzugsweise soll auch dieser Inhalt in eine weitere TextBox in der Hauptform eingefügt werden.
-
Ok, so wird das schon um einiges klarer. Wenn du an alle Texte der UserControls heran kommen möchtest brauchst du wie gesagt ersteinmal eine Eigenschaft zum abrufen des Textes im UserControl:
Public Property TextBoxContent() As String Get Return textBox1.Text End Get Set textBox1.Text = value End Set End Property
Dann musst du die Texte nacheinander auslesen. Da Sie alle letzten Endes in eine TB sollen, verknüpfe ich diese mit einem StringBuilder:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim sb As New StringBuilder()
For Each t As TabPage In TabControl1.Controls
sb.AppendLine(DirectCast(t.Controls(0), TextBoxContentControl).TextBoxContent)
sb.AppendLine() 'Leerzeile einfügen
Next
'Gib den Text zurück
Dim result As String = sb.ToString()
End SubNun musst du nur noch den Text zurück geben. Dazu kann man mehrere Wege verwenden. Ich würde eine Eigenschaft in Form2 erstellen, welcher du beim klick auf den Button einen Wert zuweißt. Diesen kannst du dann wieder über eben diese Eigenschaft auselen.
Wenn du einen 2. Wert hast, den du übertragen musst, dann kannst du genauso vorgehen, du musst halt nur neue Namen für die Eigenscaften nehmen.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets- Als Antwort markiert pipsfux3000 Mittwoch, 20. März 2013 16:41
-
Jetzt sagt er mir, dass textboxcontentcontrol nicht erkannt wird ?!
Welche Value ist bei Property -> Set gemeint?- Bearbeitet pipsfux3000 Mittwoch, 20. März 2013 16:26