Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [vb.net] classi

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    8

    [vb.net] classi

    Ciao,

    vi spiego il mio problema:

    Dalla Form1 richiamo l'istanza ad una classe X, che è composta:
    - da un public sub New() dove creo una form e una listbox
    - da un public sub UpdateValue(par) dove aggiorno i valori della listbox.
    Il problema è che se dichiaro la mia listbox all'interno della New poi non posso utilizzare nella UpdateValue() come posso fare?
    Devo rendere pubblico l'oggetto?

    codice:
    Form1
    
    Button_Click()
       Dim F = new newForm()
       F.UpdateValue(par)
    End sub
    
    Class X
    
    public sub New()
       creo la form
       creo la listbox
    end sub
    
    public sub UpdateValue(var)
       listbox.items.add(var)
    end sub
    
    End Class

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Linguaggio???
    Versione??
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    8
    Vb.net
    utilizzo la versione 2010 Express

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Riposta il codice corretto e completo.
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    8

    codice vb.NET

    codice:
    Form1
    
    dim F as object
    
    F = New NewForm(OneGroup.Name, OneGroup.ClientHandle, AnOPCItemIDs)
    
    F.UpdateValue(ClientHandles, ItemValues)
    
    
    
    
    
    Public Class NewForm
    
        Public Sub New(ByVal Name As String, ByVal ID As Long, ByVal AnOPCItemIDs() As String)
            Try
                Dim NewForm As New Form()
                NewForm.Text = "Gruppo: " & Name
                NewForm.AutoSize = True
                NewForm.Show()
    
                Dim listitem As New ListBox
                Dim List As New ListBox
    
                List.Location = New System.Drawing.Point(0, 0)
                List.Height = 100 : List.Width = 300
                NewForm.Controls.Add(List)
    
                listitem.Location = New System.Drawing.Point(0, List.Height + 10)
                listitem.Height = 200 : listitem.Width = 300
                NewForm.Controls.Add(listitem)
    
                List.Items.Add("Gruppo: " & Name)
                List.Items.Add("ServerHeader: " & ID)
                For i = 1 To AnOPCItemIDs.Length - 1
                    If AnOPCItemIDs(i) Is Nothing Then
                        Exit For
                    Else
                        listitem.Items.Add(AnOPCItemIDs(i))
                    End If
                Next
            Catch ex As Exception
                MessageBox.Show("Error: " + ex.Message + Chr(13) + ex.ToString, "Exception", MessageBoxButtons.OK)
            End Try
        End Sub
    
    
        Public Sub UpdateValue(ByVal ClientHandles As System.Array, ByVal ItemValues As System.Array) ', Byval optional qualities As System.Array, ByRef timestamp As System.Array)
            Try
                For cnItem = LBound(ClientHandles) To UBound(ClientHandles)
                    'listitem.Items.Add(ClientHandles(cnItem) & " " & ItemValues(cnItem))
                Next
            Catch ex As Exception
                MessageBox.Show("Error: " + ex.Message + Chr(13) + ex.ToString, "Exception", MessageBoxButtons.OK)
            End Try
        End Sub
    
    End Class

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Scusa ma devo ancora capire, al di la dei vari errori presenti, che significato abbia, nel contesto in cui mi hai presentato il codice, creare una Form con dei controlli all'interno di una classe creata poi con:

    codice:
    dim F as object
    F = New NewForm(OneGroup.Name, OneGroup.ClientHandle, AnOPCItemIDs)
    all'interno di cosa e dove ?? Sicuramente

    codice:
    dim F as object
    potrebbe anche essere dichiarato a livello di Form ma perchè dichiararlo Object ??? quando sai che è di tipo NewForm ?

    Quindi avrò prima di tutto:

    codice:
    Dim F As NewForm
    poi la creazione dell'istanza della classe NewForm proprio li dove l'hai messa non ci sta, oltretutto non ti permetterebbe neanche di complilare.

    Per cui avrò al limite:

    codice:
    Public Class Form1
    
        Dim F As NewForm
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            F = New NewForm(OneGroup.Name", OneGroup.ClientHandl, AnOPCItemIDs)
        End Sub
    End Class
    Secondo tra il tuo primo post e l'ultimo hai cambiato sia la versione di VB che il codice?

    Se vuoi essere aiutato devi scrivere il codice corretto e non ridotto ai minimi termini.

    Per tua domanda finale

    Il problema è che se dichiaro la mia listbox all'interno della New poi non posso utilizzare nella UpdateValue() come posso fare?
    Devo rendere pubblico l'oggetto?
    mi sembra che tu abbia risolto parzialmente risolto, basta che sposti la dichiarazione delle ListBox a livello di classe e non a livello di Sub, in questo modo:

    codice:
    Public Class NewForm
        Dim listitem As ListBox
        Dim List As ListBox
    
        Public Sub New(ByVal Name As String, ByVal ID As Long, ByVal AnOPCItemIDs() As String)
            Try
                Dim NewForm As New Form()
                NewForm.Text = "Gruppo: " & Name
                NewForm.AutoSize = True
                NewForm.Show()
    
                listitem = New ListBox
                List = New ListBox
    
                List.Location = New System.Drawing.Point(0, 0)
                List.Height = 100 : List.Width = 300
                NewForm.Controls.Add(List)
    
                listitem.Location = New System.Drawing.Point(0, List.Height + 10)
                listitem.Height = 200 : listitem.Width = 300
                NewForm.Controls.Add(listitem)
    
                List.Items.Add("Gruppo: " & Name)
                List.Items.Add("ServerHeader: " & ID)
                For i = 1 To AnOPCItemIDs.Length - 1
                    If AnOPCItemIDs(i) Is Nothing Then
                        Exit For
                    Else
                        listitem.Items.Add(AnOPCItemIDs(i))
                    End If
                Next
            Catch ex As Exception
                MessageBox.Show("Error: " + ex.Message + Chr(13) + ex.ToString, "Exception", MessageBoxButtons.OK)
            End Try
        End Sub
    
        Public Sub UpdateValue(ByVal ClientHandles As System.Array, ByVal ItemValues As System.Array) ', Byval optional qualities As System.Array, ByRef timestamp As System.Array)
            Try
                For cnItem = LBound(ClientHandles) To UBound(ClientHandles)
                    listitem.Items.Add(ClientHandles(cnItem) & " " & ItemValues(cnItem))
                Next
            Catch ex As Exception
                MessageBox.Show("Error: " + ex.Message + Chr(13) + ex.ToString, "Exception", MessageBoxButtons.OK)
            End Try
        End Sub
    
    End Class
    In attesa di chiarimenti.
    Un saluto.

    Sbagliare è umano, perseverare è diabolico.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    8
    Ciao grazie della risposta.

    Il fatto di aver dichiarato F come Object era una prova che avevo fatto.


    Si effettivamente era proprio una cavolata...non so perchè non ci ho pensato io...


    Grazie dell'aiuto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.