PDA

View Full Version : [visual c#] Refresh main da altra classe


alucard82
16-05-2009, 06:26
Salve a tutti ho un problema da cui nn riesco proprio ad uscirne. Ora vi spiego bene il problema:

ho creato una classe

class PnlProva : Panel

per estendere (credo, non sò se si dice così :D) quella del pannello normale.
Dal main creo diversi oggetti di tipo PnlProva che visualizzo sullo stesso main. A questo punto volevo creare l'evento doppioclick su questi pannellini PnlProva, quindi l'ho fatto da dentro la classe PnlProva : Panel.

Ed è qui che sorge il problema, perchè facendo in questo modo riesco a creare l'evento doppio click, ma dopo aver mostrato un form (con showdialog()) e aver salvato, avrei bisogno di chiamare una classe del main per "refreshare" il contenuto del main. Ma non riesco proprio a farlo. Ho provato a creare un metodo static nel main però nn funziona perchè poi nn riesce ad utilizzare nessuna degli attributi che definisco nel main.

C'è qualcuno che mi potrebbe aiutare?Ormai sono diversi giorni che ci provo, ma nn mi è venuta in mente nessuna idea per farlo funzionare. Grazie in anticipo.

MarcoGG
16-05-2009, 07:43
ho creato una classe

class PnlProva : Panel

per estendere (credo, non sò se si dice così :D) quella del pannello normale.


Fino a qui tutto chiaro, ma poi non ci ho capito una mazza. :D
Perdona, ma il Sab mattina ci vuol pazienza... :p
Questo "main" a cui fai riferimento è un "Pannello-Main" ( e quindi inseriresti N pannelli che ereditano dallo stesso PnlProva... ), è una "Form-Main", o... cosa ? :stordita:
Meglio se tu potessi postare un esempio essenziale di codice, ovviamente...

alucard82
16-05-2009, 08:42
heheh hai ragione nn si capisce molto bene.

allora:

Classe Main () del programma
|
|
|--> Pannello Pippo
| |-> PnlProva()
| |-> PnlProva()
| |-> PnlProva()
| |-> PnlProva()

ecco com'è fatto.
nel Main() ho una classe che mi fa il refresh del pannello pippo, che a sua volta ricrea tutti gli oggetti PnlProva.

Quindi volevo sapere, esiste un modo per lanciare il refresh dal pannello PnlProva all'evento click del mouse?

Ho provato con una classe static nel Main(), ma siccome per funzionare il refresh ha bisogno di parekki attributi e altri metodi (tutti ovviamente nn static) non riesco a farlo funzionare.

Qualche idea come risolvere?

Grazie

MarcoGG
16-05-2009, 09:27
Classe Main () del programma
|
|
|--> Pannello Pippo
| |-> PnlProva()
| |-> PnlProva()
| |-> PnlProva()
| |-> PnlProva()


Ecco, era proprio questo che non ruscivo a capire, perchè parli di Classe Main, ossia do per scontato, dato che vuoi usare i panel, che si tratti di un'applicazione Windows Forms. Quindi stiamo parlando di questo Main :

static class Program
{
/// <summary>
/// Punto di ingresso principale dell'applicazione.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}

Bene, detto questo se hai dei panel, avrai anche delle Form che li contengono, oppure dei panel contenuti in un panel-padre ecc...
Quindi puoi forzare il Refresh del contenitore, partendo dal controllo con :

panel1.Parent.Refresh();

o dall'interno della stessa classe che eredita da panel :

this.Parent.Refresh();

o ancora, fare un foreach per refreshare dal controllo panel stesso tutti i suoi "fratelli", ossia tutti quelli che hanno stesso Parent :

foreach (Control C in this.Parent.Controls) {
C.Refresh();
}

Non so se sia questo ciò che desideravi... ;)