Form non istanziabile, è possibile?

venerdì 02 luglio 2010 - 18.41

TaiChi Profilo | Junior Member

Salve a tutti,

la domanda farà inorridire molti temo ma tant'è ... :)

Mi stavo chiedendo se sia possibile, volendo richiamare un form, non doverlo dichiarare con new e chiamare direttamente suo metodo; per esempio come si fa con MessageBox che non vuole niente altro se non MessageBox.Show(arg1, arg2, ....)

La curiosità mi è nata per l'uso di un form che mi funge proprio da MessageBox.

Grazie e abbiate pietà o, al limite, pazienza per l'ignoranza... :)

Alessio Forconi

aiedail92 Profilo | Expert

Ciao

Certo che puoi, basta dichiarare il costruttore come privato, e poi creare un metodo statico Show (o come vuoi chiamarlo) che mostri la tua messagebox:

Public Class MyMessageBox Inherits Form ' Private, così non è possibile chiamarlo dall'esterno Private Sub New() End Sub ' Shared (statico), così va richiamato senza un'istanza Public Shared Shadows Function Show(Param1 As String, Param2 As String) As DialogResult ' Inizializza quello che ti serve... Return (New MyMessageBox()).ShowDialog() End Function End Class

Quindi a questo punto la usi così:

MyMessageBox.Show("arg1", "arg2")

E questo codice non compila:

Dim mmb As New MyMessageBox()

Luca

TaiChi Profilo | Junior Member

Ciao Luca,

grazie per la risposta.

Provando il uto suggerimento ottengo alcuni errori che non so risolvere, questo è quello che ho fatto:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

gli argomenti Gravity e SetButton sono due variabili di tipo enum e listBtn è una lista che inizializzo.

Gli errori sono sono tutti di tipo:
"Occorre un riferimento a un oggetto per la proprietà, il metodo o il campo non statico 'xtraMsgBox.mGravity' "

Perchè mi chiede un riferimento ad un oggetto per il ... 'non statico' ? Devo dichiarare diversamente le variabili?

La cosa strana è che se faccio il tutto con la classe "normale" funziona tutto; sono sicuro che ci deve essere un motivo, magari anche banale, ma io non so trovarlo.


Alessio Forconi

aiedail92 Profilo | Expert

Scusa, deve averti confuso l'esempio del post precedente...

Nella funzione statica prima crei l'oggetto con new, poi gli assegni le proprietà, ed infine richiami l'oggetto in questione:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Luca

TaiChi Profilo | Junior Member

Perfetto !!!

Grazie.

Alessio Forconi
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5