Avatar billede jesperthomsen1980 Nybegynder
25. januar 2005 - 23:36 Der er 14 kommentarer og
2 løsninger

Hvordan får man en værdi med over i en ny form?

Hej eksperter.

Jeg har en værdi, som jeg gerne skal have med over i en ny form.
Et et datagrid får jeg fat i en ID, som så skal åbne en ny side/form, som viser de tilhørende værdier for det ID!

Hvordan åbner man en form, hvor man tager en værdi med fra en tidligere form?

VH Jesper
Avatar billede arne_v Ekspert
25. januar 2005 - 23:40 #1
Du sender vel ID med over som argument til den nye forms constructor ...
Avatar billede jesperthomsen1980 Nybegynder
25. januar 2005 - 23:41 #2
Det vil sige noget i stil med:

Dim f As New Viskunde(Id)
me.Close
f.show

eller?
Avatar billede arne_v Ekspert
25. januar 2005 - 23:44 #3
ja

VisKunde constructor (Sub New på VB'sk) skal så bruge Id til at styre hvad den viser
Avatar billede jesperthomsen1980 Nybegynder
25. januar 2005 - 23:49 #4
Hvad skal der så stå i en nye form?

F.eks. har jeg en form der ser sådan ud:

Public Class Viskunde
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    Friend WithEvents Label1 As System.Windows.Forms.Label
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Label1 = New System.Windows.Forms.Label
        Me.SuspendLayout()
        '
        'Label1
        '
        Me.Label1.Location = New System.Drawing.Point(32, 16)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(104, 32)
        Me.Label1.TabIndex = 0
        Me.Label1.Text = "Navn"
        '
        'Viskunde
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(488, 273)
        Me.Controls.Add(Me.Label1)
        Me.Name = "Viskunde"
        Me.Text = "Viskunde"
        Me.ResumeLayout(False)
    End Sub
#End Region
End Class

Skal den så laves om til

Public Class Viskunde(id)

?
Avatar billede burningice Nybegynder
26. januar 2005 - 01:49 #5
nej

det er Public Sub New() der skal laves om til Public Sub New(ByVal Id as Integer)
Avatar billede burningice Nybegynder
26. januar 2005 - 01:51 #6
du ved... ligesom når man laver en metode der skal modtage argumenter... en constructor er også bare en metode. Dog en lidt smart en, da man kan udnytte at den udføres når at ens object oprettes.
Avatar billede jesperthomsen1980 Nybegynder
26. januar 2005 - 01:53 #7
Ja jeg tror jeg er med - vil lige prøve det, og så vender jeg lige tilbage!

Tak for nu!
Avatar billede jesperthomsen1980 Nybegynder
26. januar 2005 - 02:11 #8
Hvordan får jeg fat i den værdi der er i konstruktøren?

Hvis min konstruktør hedder Public Sub New(ByVal Id As Integer)
og jeg f.eks. skal sætte KundeID til teksten på en label?

Man kan ikke bruge Me.Label1.Text = KundeId
Avatar billede jesperthomsen1980 Nybegynder
26. januar 2005 - 02:12 #9
Jeg mente Public sub New(byval kundeId As integer)
Avatar billede burningice Nybegynder
26. januar 2005 - 02:21 #10
well... på nøjagtig samme måde som i en normal metode, så findes argumentet kun i metodens scope. Dvs at den kan kun bruges indenfor denne metode, og når metoden er færdig nedlægges variablen igen.

Denne begrænsning kan du kommer udenom ved

1) at gemme dit KundeId som et field i din klasse. På den måde kan den tilgås fra alle metoder
2) lave din constructor på denne måde

Public Sub New(ByVal KundeId As Integer)
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call
        Me.Label1.Text = KundeId

    End Sub
Avatar billede jesperthomsen1980 Nybegynder
26. januar 2005 - 02:24 #11
Hvis man grafisk genererer en label, så kan jeg ikke få lov til at bruge Me.Label1.Text = KundeId
Den "kender" ikke kundeID, tiltrods for den er erklæret i konstruktøren!

Koden

Public Class Viskunde
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New(ByVal KundeId As Integer)
        MyBase.New()
        MsgBox(KundeId)

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    Friend WithEvents Label1 As System.Windows.Forms.Label
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Label1 = New System.Windows.Forms.Label
        Me.SuspendLayout()
        '
        'Label1
        '
        Me.Label1.Location = New System.Drawing.Point(32, 16)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(104, 32)
        Me.Label1.TabIndex = 0
        Me.Label1.Text = "dgdg"
        '
        'Viskunde
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(488, 273)
        Me.Controls.Add(Me.Label1)
        Me.Name = "Viskunde"
        Me.Text = "Viskunde"
        Me.ResumeLayout(False)
    End Sub
#End Region
End Class
Avatar billede jesperthomsen1980 Nybegynder
26. januar 2005 - 02:26 #12
Men selvfølgelig kan jeg sætte Me.Label1.Text = KundeId op i til konstruktøren og så virker det!
Avatar billede jesperthomsen1980 Nybegynder
26. januar 2005 - 02:27 #13
Smider du lige et svar - har fået det jeg skal bruge for at komme videre
Avatar billede jesperthomsen1980 Nybegynder
26. januar 2005 - 02:31 #14
I skal egentlig begge smide et svar, da jeg kan se i begge har hjulpet med at løse problemet!

Takker
Avatar billede burningice Nybegynder
26. januar 2005 - 02:42 #15
hvis du bruger constructor-koden jeg kom med, så virker det

Altså, Me.Label1.Text = KundeId EFTER InitializeComponents()-kaldet
Avatar billede arne_v Ekspert
26. januar 2005 - 07:38 #16
.
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
Kurser inden for grundlæggende programmering

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