Rilevare componente fra due form

venerdì 22 giugno 2012 - 14.59
Tag Elenco Tags  C#  |  Visual Studio 2010

pieroalampi Profilo | Expert

Salve da giorni che non mi riesce fare una cosa, praticamente il tutto si fa in in c# windows form:

1 form chiamato Form1 con all'interno una panel chiamata pane1
2 form chiamto Form2 con un bottone da dove vorrei fare operazioni ad esempio:
Form1.pannel1.Controls.Clear();
o altro tipo aggiungere una pagina tipo:
Form1.panel1.Controls.Add(newMDIChild6);
la cosanon mi riesce perche sembrerebbe che i controlli fra form non siano accessibili anche se modifico il costruttore e lo rendo public, mi sapreste suggerire qualcosa per venirne a capo??

graszie mille
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

nico839 Profilo | Senior Member

ciao, hai provato a lanciare la form 2 dalla form1 passandogli come riferimento la form1?
esempio pratico :

form 2 :

private frm1 as form1
public sub new(byref frm as form1)
frm1 = frm
initializecomponent
end sub

da qui per agire sulla form1 agisci sulla variabile frm1
quindi frm1.controls.add .....

e nella form1 lanci la form2 come
dim frm as new form2(me)
frm.show

Ciao.
Nicolas

http://perledinico.blogspot.com

pieroalampi Profilo | Expert

non credo che sia la stessa cosa da vb.net a c#
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

nico839 Profilo | Senior Member

teoricamente si....

dovrebbe essere

private form1 frm1;
public New(ref form1 frm)
{
frm1 = frm;
initializecomponent();
}

lanci la form2

form2 frm = new form2(this);
frm.show();
Ciao.
Nicolas

http://perledinico.blogspot.com

Vinsent Profilo | Senior Member

> Salve da giorni che non mi riesce fare una cosa, praticamente
>il tutto si fa in in c# windows form:
>
>1 form chiamato Form1 con all'interno una panel chiamata pane1
>2 form chiamto Form2 con un bottone da dove vorrei fare operazioni
>ad esempio:
>Form1.pannel1.Controls.Clear();
>o altro tipo aggiungere una pagina tipo:
>Form1.panel1.Controls.Add(newMDIChild6);
>la cosanon mi riesce perche sembrerebbe che i controlli fra form
>non siano accessibili anche se modifico il costruttore e lo rendo
>public, mi sapreste suggerire qualcosa per venirne a capo??
>
>graszie mille

In che senso non ti riesce??? Ti restituisce un' errore o un exception?
Con la poca esperienza che ho...non ho mai avuto problemi ad accedere ai controlli tra form e form tranne che il thread chiamante sia diverso dal ricevente, in questo caso basta usare un delegato...

InsettoScoppiettato Profilo | Junior Member

Io farei così:

1) il controls.clear() lo eseguo da un metodo privato di Form1 (ad esempio private void ClearPane1() )
2) creao un evento custom (pubblico) per FOrm 1, che ha come handler ClearPane1() che è void e prende void quindi a bene per gli eventi base), chiamalo ad esempio OnPane1ToBeCleared()
3) dal form 2 invoco l'evento OnPane1ToBeCleared() quando mi serve, per esempio tramite il Button premuto (all0interno del suo handler del click)

in questo modo sarà il thread fi Form 1 a gestire il clear di uno dei suoi contenitori.
Non puoi gestire i contenitori di un form da un alro form, e comunque anche se questo fosse possibile finisresti probabilmente in un caso di cross threading.

ciao

Alessandro Parma

pieroalampi Profilo | Expert

nico, direi proprio che non va cosi!! ma grazie
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

nico839 Profilo | Senior Member

Mi spiace...di solito in vb net quando devo variare valori di textbox o proprietà di button e vari controlli funziona....
Ciao.
Nicolas

http://perledinico.blogspot.com

pieroalampi Profilo | Expert

si da vb.net si ma con c# le cose cambiano, grazie ancora
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

InsettoScoppiettato Profilo | Junior Member

Scusa gli errori ortigrafici sul mio precedente post, spero sia risultato lo stesso comprensibile e utile.
hai inteso cosa ti proponevo? Io uso proprio questo tipo di call back quando ho due form che lavorano in parallelo, ma ho dato per scontato che i tuoi due form vivano su processi diversi (il che dovrebbe essere per poterli gestire più fluidamente).
Ciao

Alessandro Parma

pieroalampi Profilo | Expert

ho cercato di scriverti in privato mo non riesco a trovare il modo, mi dai una mail?? in poche parole non sono riuscito a farlo forse perche io sostanzialmente lo devo fare fra tre form!!!
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

InsettoScoppiettato Profilo | Junior Member

alessandro.parma@gmail.com
ciauz
Alessandro Parma
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5