Ik probeer het zo simpel mogelijk uit te leggen. Ik heb in vb.net een form "Form1.vb". Ik heb een andere class "VeranderText.vb". De bedoeling is dat in in de class "VeranderText.vb" de inhoud van de label "TestLabel" verander in "Form1.vb".
Kan iemand mij hiermee helpen? Bedankt
(Voor de mensen die zich afvragen wrm dit dient. VeranderText is de class die ik oproep van uit een thread, maar ik zou de resultaten van die thread laten willen zien in een textfield)
zonder thread is dit zeer simpel. In uw klasse doe je gewoon:
public shared sub VeranderTekst() Form1.Label1.Text = "nieuwe tekst" end sub
Het probleem is nu dat je van een thread normaal gezien (ik kan mij natuurlijk vergissen) die tekst niet zomaar zal kunnen veranderen zonder een cross-thread exception te krijgen. Dit komt omdat een control op de mainthread van het programma zit en je daar niet zomaar aankan. Ik zou eens moeten kijken hoe het dan wel gaat, maar met delegates is het wat foefelen met me.invoke() enzo. Maar misschien lukt dat met threads dus wel rechtstreeks al betwijfel ik dat.
Het is mij gelukt voor de mensen dat het interesseert
In form1.vb heb ik de volgende code Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim andereclass As New VeranderText andereclass.setform(Me) andereclass.settextForm() End Sub
En in de Class VeranderText is Public Class VeranderText Dim frm As Form1
Sub setform(ByVal form As Form1) frm = form End Sub
Sub settextForm() frm.TextBox1.Text = "gelukt" End Sub
End Class
nu werkt het Bedankt toch voor de mensen die dit gelezen hebben
hmm Heb zo mijn twijfels bij deze code... Het gaat idd wel werken want je klasse kent je form en dus ook je textbox MAAR je geeft wel telkens heel je form door. maw, je heeft veeeel te veel informatie aan je klasse, hij moet niets weten van je form, hij moet enkel het textvak kennen.
Waarom niet gewoon:
in uw form:
als er op de knop geklikt wordt: dim klasse as new VeranderText() klasse.setText(txtTextbox)
je kan deze 2 regels natuurlijk ook gewoon zetten als: new VeranderText().setText(txtTextBox)
en dan in uw klasse VeranderText.vb
public sub setText(ByRef txtTextBox) txtTextBox.Text = nieuwe text End Sub
Je kan ook ipv ByRef ByVal gebruiken maar in dit geval lijkt me ByRef beter. In feite zeg je nu gewoon tegen de de klasse "verander de text eens van dit veld (het veld dat je meegeeft)" De ByRef maakt het nog iets performanter omdat het veld niet helemaal wordt meegegeven naar de klasse, er wordt gewoon een verwijzing gemaakt.
dannyboy schreef: gewoon alles public maken en het probleem is opgelost
Nu gaat die kerel dat eindelijk opgelost krijgen..... 9 maanden zit hij daar ondertussen al op te zoeken.... (zie datum topic) ..... maar dankzij dannyboy ...........
Laatst aangepast door
Quagmire
op 23/10/2007 20:01:21u
(1x aangepast)
dannyboy schreef: gewoon alles public maken en het probleem is opgelost
Nu gaat die kerel dat eindelijk opgelost krijgen..... 9 maanden zit hij daar ondertussen al op te zoeken.... (zie datum topic) ..... maar dankzij dannyboy ...........
Mja en dan nog met de meest ranzige oplossing ooit