Liebe/-r Experte/-in,
Versuche zur Zeit mir nach einen Buch mir VB.NET beizubringen. Habe ein Rechner mit Win7, das MS Visual Basic 2010 Express Edition.
Nun wollte selbst ein Programm zu schreiben in dem ich von Formular1 einige Daten aus anderen Formularen auslöse.
Habe also das Hauptformular Form1 und einen Form2, hatte die Absicht aus Form1 den Wert aus der TextBox1 des Form2 auszulösen. Das ist scheinbar unmöglich, zumindest für mich.
Syntax Form1
Private Sub Button3(……)
Form2.Show
End
Private Sub Button2(……)
Dim wx AS Integer
Dim w AS Integer
w = New Form2
w.übergabe()
wx = w.xyz
Meine Absicht ist hier das Formular2 aktivieren und aus Subr. Übergabe werte übernehmen.
end sub
Synatx Form2
Public xyz AS Integer
Public xx As Integer
.
.
Public Sub übergabe()
xx = CInt(Val(TextBox1.Text))
xyz = xx
end sub
Versuche hier aus der TextBox1 eine vorhandenen Wert auszulösen , Ergebnis ist immer null obwohl in der TextBox1 eine Zahl steht.
Ändere hingegen die Syntax statt xyz = xx und gebe xyz einen festen Wert z.B. xyz = 20, so wird der Wert 20 sowohl als xyz wie auch in xx übergeben.
Gibt es andere Möglichkeit, versuchte und scheiterte dem Form2 anderweitig anzusprechen wie xyz = Form2. CInt(Val(TexBox1.Text)) jedoch das funktioniert nicht.
Bin ich mit meiner Logik völlig daneben, ist das überhaupt möglich.
Kann mir jemand Tipps geben?
Danke in voraus
geo2008
Hallo geo2008!
Steuerelemente in anderen Formularen kannst du normalerweise so ansprechen:
Forms!andererFormname!Steuerelementname
Schau dir hierzu diesen Beitrag einmal an:
http://www.office-loesung.de/ftopic62147_0_0_asc.php
Grüße
Hallo Geo2008,
also erst einmal würde ich vermeiden, Sonderzeichen als Namen für Variablen oder Prozeduren zu verwenden- dazu gehören auch Umlaute und ß.
Du kannst Elemente von Forms direkt ansprechen, indem du den Formnamen voranstellst, da brauchst du also keine Übergabeprozeduren oder sonstige Hilfsmittel.
Also ganz einfach:
Public Class Form1
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
TextBox1.Text = Form2.TextBox1.Text
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Form2.Show()
End Sub
End Class
Gruß
Klaus
Danke Klaus
es geht super und einfach, da war ich ganz schön auf einen Holweg
geo2008
Danke
Hey,
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text = Form2.TextBox1.Text
End Sub
Du musst eigentlich nur vornedran die Form nennen, damit der PC weiß von wo er die Daten nehmen soll.
Viele Grüße
Public Class Form1
Private mobjForm As Form2 = New Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
mobjForm.Show()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
mobjForm.Uebergabe()
End Sub
End Class
Public Class Form2
Public Sub Uebergabe()
Dim intValue As Integer = 0
Try
intValue = CInt(TextBox1.Text)
Catch ex As Exception
MsgBox("Upps ein Fehler. " & ex.Message, MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, „MyProgram“)
End Try
End Sub
End Class
Hallo!
Leider kann man mit Deinem Code nicht wirklich viel anfangen - da sind zu viele Fehler drin, als dass man sehen könnte, woran es im tatsächlichen Programm hängt.
Erste Regel für die Hilfesuche: Das Problem so präzise wie nur irgend möglich schildern.
Bspw. deklarierst Du im Sub Button2 die Variable „w“ als Integer, weist ihr danach aber eine Instanz der Klasse Form2 zu - das wird sich so nicht mal übersetzen lassen.
Wenn Du Daten zwischen 2 Forms übergeben willst, müssen die sich gegenseitig kennen. Genauer gesagt: Je eine Instanz von Form1 muss eine Instanz von Form2 kennen (oder Du verwendest eine Steuerklasse, die mit beiden Forms kommuniziert und für die Logik zuständig ist - ist meist besserer Stil).
Du möchtest ja anscheinend den in einer Textbox eingegebenen Wert (übrigens: Vernünftige Namen für die Steuerelemente sind praktisch ein Muss, wenn Du Dich später mal wieder zurecht finden willst. Du heißt ja bestimmt auch nicht „Kind1“, oder? ) als Integer nach draußen (also für außerhalb Form2) bereitstellen.
Ich würde dazu in Form2 ein Property einbauen und im Get sowas schreiben wie
return Convert.ToInt32(TextBox1.Text)
Das Rumgetue mit CInt und Val empfehle ich ausdrücklich NICHT - verwende sinnvollerweise die objektorientierten Mechanismen von .NET und nicht irgendwelche Basic-Specials, dann tun sich andere leichter mit dem Lesen.
Dann kannst Du in Form1, wenn Du eine Referenz auf diese Instanz von Form2 hast, einfach auf das Property zugreifen und bekommst den Wert.
Gruß,
Martin
Prima , danke
Hallo
Deine Antwort mit Ratschlägen, vor allem Kritik, auch ein bisschen überheblich, ist für mich weniger hilfreich, zudem kommt mir noch vor als wäre das Thema etwas verfehlt. Von anderen Experten habe bereits eine Lösung bekommen die auch für mich verblüffend einfach wie auch kurz ist.
Trotzdem danke für deine Bemühungen
geo2008