[#] richiamare textBox da altra classe

giovedì 24 gennaio 2008 - 15.41

head Profilo | Newbie

Ciao a tutti, sono nuovo in ambiente .net, e sto lavorando ad un progetto in C# per un esame. Mi sono imbattuto in un problema: vorrei poter scrivere su una textBox contenuta nel Form principale di una applicazione Windows, effettuando una chiamata da altre classi contenute nello stesso namespace, ma non ci riesco. Come posso fare? Grazie mille.

aiedail92 Profilo | Expert

Ciao

ci sono due modi per risolvere il tuo problema: il primo consiste nell'aumentare il livello di accessibilità della textBox (dichiarandola quindi come internal o public) e quindi accedervi mediante l'istanza della classe nella quale è contenuta, in questo modo:

tuaClasse.tuaTextBox.Text="valore";

dove tuaClasse non è la classe ma una sua istanza.

Oppure implementi una proprietà pubblica di tipo string nella tua classe che imposta o ottiene il valore della proprietà Text della textBox in questo modo:

public string TextBoxText { get { return tuaTextBox.Text; } set { tuaTextBox.Text = value; } }

Se hai ancora qualche dubbio, chiedi pure

Luca

0v3rCl0ck Profilo | Guru

>Ciao a tutti,

Ciao

>sono nuovo in ambiente .net, e sto lavorando ad
>un progetto in C# per un esame. Mi sono imbattuto in un problema:
>vorrei poter scrivere su una textBox contenuta nel Form principale
>di una applicazione Windows, effettuando una chiamata da altre
>classi contenute nello stesso namespace, ma non ci riesco. Come
>posso fare? Grazie mille.


Ti consiglio di fare una property pubblica sulla form principale, che imposta e legge la textbox suddetta. Poi nell'altra form fai un'altra property pubblica 'FormPrincipale' di tipo appunto FormPricipale. A questo punto appena prima di aprire la nuova form, imposti la property 'FormPrincipale' con un bel 'this', che sarà riferito alla form principale, e poi dalla nuova form, potrai fare una cosa del tipo: this.FormPrincipale.PropertyDaScrivere = "quello che vuoi";


Spero di esserti stato di aiuto.

Enjoy It

http://blogs.dotnethell.it/Regulator/

head Profilo | Newbie

Grazie ad entrambi per le risposte.

Per aiedail: Ho provato a dichiarare la textbox come public ed accedervi mediante l'istanza del Form (Form1.texBox1.Text = "testo";) ma senza risultati. Per quanto riguarda invece la creazione di una proprietà, si verifica il problema analogo, cioè non riesco a "vederla" all'interno dell'altra classe.

Per overclock: Non devo accedere alla textBox da un altro Form, devo solo modificare il testo di una textBox richiamando quest'ultima dall'interno di alcuni metodi presenti in un'altra classe (non Form).

Aiutatemi, vi prego :)

aiedail92 Profilo | Expert

ciao

il problema deve essere che tu provi ad accedere alla proprietà (o alla textbox) mediante la classe, e non mediante un'instanza della classe. Prova a dichiarare una variabile tuaForm di tipo FormPrincipale (il form contenente la textBox) nella classe dalla quale devi modificare il testo, e poi a modificare la proprietà della variabile tuaForm:

FormPrincipale tuaForm = new FormPrincipale; void CambiaTesto() { tuaForm.tuaTextBox.Text = "Nuovo valore"; }

Tu non vedi la proprietà che hai impostato perchè accedi dal tipo, e quindi vedi solo i campi, i metodi e le proprietà statiche.

Luca

head Profilo | Newbie

Grazie Luca, ho provato a creare una nuova istanza della classe ( Form1 miaform = new Form1(); ) ed a modificare il testo della textbox da lì, ma il valore all'interno della textbox non cambia. Forse dovrei usare un modo per capire quale sia l'istanza della Form aperta? Ho visto che esiste un oggetto Application.OpenForms, potrei utilizzare questo? Grazie.

0v3rCl0ck Profilo | Guru

>Grazie Luca, ho provato a creare una nuova istanza della classe
>( Form1 miaform = new Form1(); ) ed a modificare il testo della
>textbox da lì, ma il valore all'interno della textbox non cambia.
>Forse dovrei usare un modo per capire quale sia l'istanza della
>Form aperta? Ho visto che esiste un oggetto Application.OpenForms,
>potrei utilizzare questo? Grazie.

Si, se hai bisogno di cercare l'istanza aperta.



http://blogs.dotnethell.it/Regulator/

aiedail92 Profilo | Expert

Allora...

Usare la proprietà openForms potrebbe essere una delle opportunità, ma sorgono dei problemi se hai più di una form aperta nel programma.

Un'altro metodo potrebbe essere esplorare la classe Program (dovrebbe esserci il file program.cs) e aggiungere all'interno della classe una variabile statica di tipo Form1, e modificare la static void Main in questo modo:

static class Program { public static Form1 MainForm = new Form1(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(MainForm); } }

In questo modo viene eseguito all'avvio dell'applicazione l'istanza MainForm di Form1, che essendo statica è accessibile dalla classe Program in qualsiasi classe del tuo programma.

Per modificare il testo quindi ora ti basta fare:

Program.MainForm.TextBoxText = "valore";

Luca

head Profilo | Newbie

Ho provato, come hai detto, a scrivere:

static class Program { public static Form1 MainForm = new Form1(); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(MainForm); } }

Ma purtroppo non funziona. Ho eseguito il debug e ricevo questo messaggio: "SetCompatibleTextRenderingDefault deve essere chiamato prima della creazione del primo oggetto IWin32Window nell'applicazione."

A cosa può essere dovuto? Sento comunque che ci stiamo avvicinando alla soluzione :D Grazie ancora.

aiedail92 Profilo | Expert

Scusa, non ci avevo pensato

Risolvi tutto in questo modo: invece di istanziare la variabile globalmente, dichiarala e basta, e poi istanziala nella void main, subito prima del metodo Application.Run

static class Program { public static Form1 MainForm; /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm = new Form1(); Application.Run(MainForm); } }

Luca

head Profilo | Newbie

Grazie mille Luca, adesso va. Mi hai risolto un grosso problema, non so come ricambiare!! A presto!
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