15. januar 2009 - 20:19Der er
6 kommentarer og 1 løsning
Global variabel mellem Windows forms
Jeg har et Windowsprogram med forskellige forms. Jeg vil gerne kunne sætte en variabels værdi i form1 og så være i stand til at aflæse værdien i form2 - hvordan gøres det? Jeg har prøvet med Public x, men det accepteres ikke og anbefales ændret til Dim, men på denne måde er værdien ikke kendt i form2.
Form1 skal have et private field og en public property, Form2 får en ref til en instans af Form1 med over i constructor og gemmer den ref, når Form2 skal hente værdien så bruger den ref til at tilgå propertyen.
Imports System Imports System.Drawing Imports System.Windows.Forms
Namespace E Public Class MainForm Inherits Form Private button1 As Button Private label1 As Label Public Sub New() MyBase.New button1 = New Button label1 = New Label SuspendLayout button1.Location = New Point(100, 100) button1.Size = New Size(100, 25) button1.Text = "Åben sub form" AddHandler button1.Click, AddressOf Button1Click label1.Location = New Point(100, 200) label1.Size = New Size(100, 25) ClientSize = New Size(300, 300) Controls.Add(button1) Controls.Add(label1) Text = "Main Form" ResumeLayout(false) End Sub Private Sub Button1Click(sender As System.Object, e As System.EventArgs) Dim form2 As New SubForm(me) form2.Show End Sub Public Sub SetLabel(txt As String) label1.Text = txt End Sub End Class Public Class SubForm Inherits Form Private mf As MainForm Private button1 As Button Public Sub New(mf As MainForm) MyBase.New me.mf = mf button1 = New Button SuspendLayout button1.Location = New Point(25, 100) button1.Size = New Size(150, 25) button1.Text = "Sæt label i main form" AddHandler button1.Click, AddressOf Button1Click ClientSize = New Size(200, 200) Controls.Add(button1) Text = "Sub Form" ResumeLayout(false) End Sub Private Sub Button1Click(sender As System.Object, e As System.EventArgs) mf.SetLabel("Det virker") End Sub End Class Public Class TestClass Public Shared Sub Main Dim mf As New MainForm mf.ShowDialog() End Sub End Class End Namespace
Jeg har nu med lidt hjælp fået dit eksempel 'kogt lidt ned' - så synes jeg - for mig - at det er lidt tydeligere!
Jeg har to forms med hver sin knap og her sætter jeg koden:
Form1
Public Class Form1 Inherits Form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim tmpForm As New Form2("ABC") tmpForm.Show() End Sub
End Class
Form2
Public Class Form2 Inherits Form Dim var As String
Public Sub New(ByVal MinVariabel As String) InitializeComponent() var = MinVariabel End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show(var) '<---------------- "ABC". End Sub End Class
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.