VB .Net - Uso della clausola "New"

martedì 31 marzo 2009 - 18.53

fausto1965 Profilo | Newbie

Salve a tutti vorrei cercare di capire se possibile e in che modo ovviare al seguente problema:

Se apro una form come New (es. Dim f1 as New Form1... f1.ShowDialog()), come faccio a passargli dei dati oppure una qualsivolgia
propietà da un'ulteriore form aperta successivamente dalla medesima???

Ovviamente se dall'ultima form attivata scrivo es.. Form1.BackColor = ...... non succede un bel nulla

Grazie

ysdemarc Profilo | Expert

ti potresti fare una classettina dove metti le informazioni che devi passare e la serializzi...

oppure mettere i dati in una tabella temporanea

oppure ridefinire il metodo New Form1

o megli alla creazione del form tu hai questo metodo che viene eseguito

public Form1()
{

InitializeComponent();
}

potresi ridefinire il metodo ad esempio

public Form1(MiaClasse classeDati)
{

InitializeComponent();

//...inizializzazioni secondo l'oggetto classeDati di tipo MiaClasse
this.BackColor = classeDati.ColoreSfondo; //ad esempio
}

e quest'ultimo modo mi sembra il più pulito.

Form1.BackColor non fa niente poichè il tuo oggetto di tipo Form1 si chiama f1 e non Form1

PS: ho scritot in c# per comodità..ma per vb valgono le stesse cose.

fausto1965 Profilo | Newbie

Anzitutto Grazie.
Domandina da principiante:
Cosa si intende per....
- serializzare la classettina
- ridefinire il metodo New Form1
???

ysdemarc Profilo | Expert

Serializzare una classe in parole povere significa fare un file fisico di quella classe.
Usando Serializable basterebbe passare la classe al metodo per salvarla in un file per poi richiamarla da dove vuoi valorizzandoti correttamente la nuova classe.

trovi qualcosa qui http://www.dotnethell.it/forum/messages.aspx?ThreadID=27718

Ridefinire un metodo significa copiare un metodo e cambiargli gli attributi..
ad esempio supponiamo di creare una classe di nome MiaClasse con solo 2 metodi:

Imports System.Drawing Public Class MiaClasse Private cColoreSfondo As Color Private cCocloreCarattere As Color Public Sub New() End Sub Public Property ColoreSfondo() As Color Get Return cColoreSfondo End Get Set(ByVal Value As Color) cColoreSfondo = Value End Set End Property Public Property ColoreCarattere() As Color Get Return cCocloreCarattere End Get Set(ByVal Value As Color) cCocloreCarattere = Value End Set End Property End Class

a questo punto da qualche parte magari in un pulsante di comando scriverai

Dim m As MiaClasse = New MiaClasse m.ColoreCarattere = Me.ForeColor m.ColoreSfondo = Me.BackColor Dim f1 As Form1 = New Form1(m) f1.ShowDialog()

scrivendo Dim f1 As Form1 = New Form1(m) stai utilizzando il metodo ridefinito infatti prima il tuo form conteneva solo il metodo

Public Sub New() MyBase.New() InitializeComponent() End Sub

poi lo ridefinisci così
Public Sub New(ByVal m As MiaClasse) MyBase.New() InitializeComponent() Me.ForeColor = m.ColoreCarattere Me.BackColor = m.ColoreSfondo End Sub

e quindi lo richiami passandogli i dati.

quindi quando scrivi New Form1() chiamerai il primo metodo
quando scrivi New Form1(tuaMiaClasse) chiamerai il secondo metodo
Vincenzo
Programmatore sbilenco

fausto1965 Profilo | Newbie

Benissimo grazie mille !
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5