Visibilita' oggetti e funzioni

martedì 24 febbraio 2004 - 19.26

Anonimo Profilo | Senior Member

Ciao a tutti
ho un problema inerente alla visibilita':
possiedo due form una con una textbox e un altra con una listbox, quando clicco sulla listbox eseguo un certo tipo di operazione e vado a scrivere un risultato sulla textbox,
la funzione che scrive sulla textbox e' la seguente

public static void add_chord(char[] chord)
//char[] chord e' un array che mi ritorna dall'altra form
{
line1.Text = line1.Text + chord[0];
.........
}

il problema nasce dal fatto che non mi vede la textbox generando mi il seguente errore
'HelloTab.Form1.line1' indica 'campo' dove era previsto 'classe'.

Ho provato a rendere public static la textbox eliminando anche tutti i this inerenti ad essa, funziona ma quando inserisco un nuovo oggetto sulla form l'ide mi corregge il codice riportandomelo come prima....

Come posso fare


Brainkiller Profilo | Guru

Allega se puoi il progetto completo, magari elimina il codice sensibile.
Faccio un po' fatica a seguirti così. Ho capito forse di cosa si tratta ma dovrei ricostruirmi da zero il tuo ambiente per farti vedere la soluzione.
ciao

david

Anonimo Profilo | Senior Member

ecco a voi il codice....
nulla di top secret... sto cercando di creare un programma "amatoriale" per fare le tabulature per la chitarra o basso.... se vedete del codice strano e' di prova....
la form frmChordLibrary e' quella dalla quale devo chiamare la funzione sull'altra form.
line1 line2 .... line6 sono le mie text box che devo riempire con un singolo carattere alla volta passato da un array di char...



BYez

Anonimo Profilo | Senior Member

il codice incriminato lo richiamo da un'altra form.

Anonimo Profilo | Senior Member

Che idiota non funziona anche perche' e' static, è un metodo di classe e non di istanza. Non posso accedere da esso ad un campo non static come la textBox.

Ricapitolando ho due form
la prima con la funzione

public void add_chord(char[] chord){

txtLine1. text = txtLine1.text + chord[0]l;

//.........//


}


la seconda che richiama la fuzione add_chord dalla prima


private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
char[] pippo = {'0','1','2','2','x','x'}; //esempio
Form1.add_chord(pippo); //addchord non viene visto


}

devo dire pero' che form1 e' il nome della classe e non dell'istanza

Brainkiller Profilo | Guru

Non puoi richiamare quella funzione semplicemente perchè Form1 non è un oggetto quindi non è un'istanza di una classe.
Per poter vedere il metodo add_chord devi creare un'istanza dell'oggetto in questo modo:

Form1 k=new Form1();
k.add_chord(pippo);

così la vedi, solo che l'istanza k è un'istanza nuova e non è quella della Form che già hai visualizzato.
Come ti dicevo precedentemente, modifica il costruttore della seconda Form (frmChordLibrary) e fai in modo che ci sia un costruttore che accetta un parametro di tipo Form1 che immagazzinerai in una variabile private. In questo modo una volta dentro frmChordLibrary avrai accesso alla tua variabile che conterrà in pratica il riferimento o puntatore alla Form chiamante e da lì allora avrai accesso diretto a tutti i metodi e le funzioni quindi anche add_chord :) penso di essere stato chiaro.

fai sapere.
ciao
david

Anonimo Profilo | Senior Member

Se ho ben capito quando carico frmChordLibrary devo passargli il nome dell'istanza di form1 giusto? ma come faccio a sapere il nome dell'istanza di form1?

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