Avatar billede Kim Neesgaard Seniormester
15. januar 2009 - 20:19 Der 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.
Avatar billede arne_v Ekspert
16. januar 2009 - 00:27 #1
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.
Avatar billede Kim Neesgaard Seniormester
16. januar 2009 - 07:36 #2
Kan du give et konkret eksempel på det?
Avatar billede arne_v Ekspert
01. februar 2009 - 22:24 #3
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
Avatar billede arne_v Ekspert
01. februar 2009 - 22:25 #4
Lidt fjollet eksempel, men det er komplet - uden noget genereret kode.
Avatar billede Kim Neesgaard Seniormester
15. april 2009 - 19:16 #5
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

Og tak for hjælpen!
Avatar billede Kim Neesgaard Seniormester
15. april 2009 - 19:17 #6
Vil du lægge et svar?
Avatar billede arne_v Ekspert
15. april 2009 - 19:30 #7
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester