Uso delle librerie

domenica 24 dicembre 2006 - 13.23

Shadow Profilo | Junior Member

Innanziututto, un carissimo augurio ai membri di un forum che mi è stato innumerevoli volte utilissimo ed a tutte le loro famiglie. Sto iniziando ad usare le librerie di classi, per crearmi 'spezzoni' di codice da riusare poi nei miei progetto. In una di queste ho creato un form C# 2005 nel quale ho inserito un pannello. Ho poi inserito nella libreria una nuova classe (aggiungi -> nuovo elemento -> classe) dalla quale vorrei far compiere alcune operazioni su questo form, in particolare fa scoparire il suddetto pannello. Però nella classe che ho creato viene visto il form ma non i suoi componenti interni, ovvero l'intellisense non mi dà nella lista il pannello ubicato nel form. Come rimediare? Grazie ed ancora cari auguri, vi copio sotto il codice della nuova classe che ho aggiunto.

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace FedecomLibrary
{
public class ClassLayout

{
void LayoutPanel()
{
frmMain myFrm = new frmMain();
myFrm. -----ECCO IL PUNTO IN CUI NON VEDE IL PANNELLO----
}
}
}


Shadow

freeteo Profilo | Guru

ciao,
non viene visto da intellisense perche' se guardi nel codice "frm.designer.cs" dovreti vedere la dichiarazione del pannello come "private" quindi non accessibile all'esterno.
(Magari cerca per nome e trovi la riga di dichiarazione in mezzo a tutte le altre dato che quel file vien generato in automatico ed è abbastanza lungo )

Quindi o modifichi la visibilita' di quel pannello in quel file mettendolo "public" oppure meglio ancora usi le proprieta' in modo da avere piu' controllo (e fare una programmazione piu' intelligente), in questo modo:

nel file della Form, dichiari una proprieta' che in realta' ti restituisca quella varibile, qualcosa del tipo:
public partial class Form1 : Form { public Panel Pannello { get { return this.panel1; } set { this.panel1 = value; } }

io lavorerei con le proprieta', è qualcosa che ti permette di essere piu' flessibile per darlo in sola lettura etc...insomma piu' orentato alle possibili esigenze future...non si discute cmq che mettendo public il pannello tu possa fare ugualmente come meno sforzo...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Shadow Profilo | Junior Member

Caro Matteo,
ti ringrazio per la risposta, che mi ha aiutato a risolvere il problema. Ho provato con le proprietà, come hai detto tu. Diciamo che in questo programmino più che sul software in sé mi sto concentrando sulle regole per imparare a programmare bene (non mi basta più che un programma faccia quello che voglio, ma voglio che lo faccia nel modo più efficace ed elegante possibile). A tal proposito ho iniziato a lavorare con le librerie e con classi separate. Come vedi la mia tendenza a 'dividere' il programma in più parti (creando classi ad hoc per le varie sezioni, usando librerie che poi posso usare per i vari progetti senza riscriverle ecc)?

Inoltre ti pongo un quesito sull'argomento: quando avrò terminato la mia libreria qual'è il modo corretto per collegarla ad un progetto eseguibile, o meglio come aggiungere alla libreria un progetto eseguibile in modo poi che si vedano e funzionino correttamente? Basta il classico 'aggiungi progetto a soluzione' o devo fare altro?

Grazie ancora.
Shadow

freeteo Profilo | Guru

>Inoltre ti pongo un quesito sull'argomento: quando avrò terminato
>la mia libreria qual'è il modo corretto per collegarla ad un
>progetto eseguibile, o meglio come aggiungere alla libreria un
>progetto eseguibile in modo poi che si vedano e funzionino correttamente?
perche' il programma compilato funzioni la libreria deve essere referenziata, quindi diciamo che basta che fai "add reference" (aggiungi riferimento) e andando su browse la scegli.A programma compilato cmq, ti basta che sia nella stessa dir dell'eseguibile (o nella GAC).

Pero' invece di fare il riferimento come ti ho detto, dato che la stai sviluppando tutte e 2 e probabilmente la modificherai, ti conviene referenziare il progetto e non il singolo file dll, in modo che tu possa debuggare facilmente e avere le modifiche in tempo reale riportate sul progetto (o sui progetti) che le utilizzano.
Quindi in poche parole conviene referenziare come progetto le verie componenti del programma, cosi' sei piu' "agile" nella programmazione.


>Basta il classico 'aggiungi progetto a soluzione' o devo fare
>altro?
come ti dicevo prima, aggiungere il progetto alla soluzione e referenziare il progetto ti aiuta peroche' diciamo che un'unica finestra di visual studio gestisci varie cose eterogene, è il modo migliore per saltare da uno all'altro...ma ai fini del programma ti basterebbe solo che venga referenziata.


>Grazie ancora.
>Shadow
di niente!
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Shadow Profilo | Junior Member

Gentilissimo ed anche molto esaustivo... E come vedi questo mio 'cambiamento' nella filosofia progettuale? E' meglio avere varie classi per varie funzioni, e magari una libreria che faccia le funzioni più di frequentemente usate, piuttosto che mettere un intero programma in un unico form / classe?

Grazie
Shadow

freeteo Profilo | Guru

>Gentilissimo ed anche molto esaustivo... E come vedi questo mio
>'cambiamento' nella filosofia progettuale?
diciamo che "deve" essere cosi'!...bisogna programmare bene e perederci magari piu' tempo all'inizio per avere vantaggi dopo...
Quindi mi sembra che tu stia imboccando la strada giusta...


E' meglio avere varie
>classi per varie funzioni, e magari una libreria che faccia le
>funzioni più di frequentemente usate, piuttosto che mettere un
>intero programma in un unico form / classe?
assolutamente si, cosi' facendo lo rendi piu' riutilizzabile, piu' estendibile e soprattutto eviti di riscrivere codice ogni volta che ti serve...il copia incolla è sempre meno consigliato, con linguaggi ObjectOriented devi pensare all'oggetto, quindi alla libreria.
Ovvio, non per ogni oggetto che maneggi, magari fatti una dll di funzioni comuni, e magari un'altra di controlli cosi' il lavoro fatto all'inizio lo puoi integrare in applicazioni sucessive...


>Grazie
>Shadow
di niente, e cmq è solo un mio parere...e se ormai sono in tantissimi a pensarla cosi ci sara' un motivo

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Shadow Profilo | Junior Member

Matteo mi sei stato utilissimo, ora so che sto procedendo nella giusta direzione. Grazie ancora.
Shadow

freeteo Profilo | Guru

di niente! e cmq tieni presente che non c'e' mai un metodo assoluto, quello che ti ho detto io è un modo mio di operare che ho trovato efficente, vedi se lo è anche per te
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5