PDA

View Full Version : [C#] Utilizzare un controllo nella classe


pare93
01-11-2011, 16:01
Salve,

devo creare una algoritmo dove faccio uso di un controllo, in questo caso una TextBox, in una classe esterna.

Mi spiego attraverso un piccolo esempio.

public partial class Form1 : Form
{
......
Metodi vari
......
}

private class MiaClasse
{
......
Metodo che usa textBox della Form madre
......
}

Ho provato costruendo una funzione della classe Form1 che riceve come parametro il messaggio e al suo interno stampa il mess nella textBox. E quindi richiamando questa funzione dalla classe "MiaClasse".
Non mi da errore ma penso che ci sia un errore di fondo riguardo all' ereditarietà o magari riguardo al Thread che ha creato la classe Form.
Ad ogni modo non funziona lo stesso.

Inoltre ho provato a prendere una parte di algoritmo da una programma esterno che utilizzava il delegate ( cose di cui non sono a conoscenza ) ma non riesco ne a capire quella parte ne a farlo funzionare.

Qualcuno ha qualche suggeriento ?
Grazie.

pare93
04-11-2011, 18:01
up

s1m0_93
05-11-2011, 21:30
Scusa ma così non funziona?


public partial class Form1 : Form
{
public Form1()
{
myTextBox.Text = new Textbox();;
}

Textbox myTextBox {get;set;}
}

private class MiaClasse
{
public MiaClasse(Form form)
{
myForm = form;
}


Form myForm;

public void ChangeTextbox(string text)
{
myForm.myTextBox = text;
}


}

pare93
06-11-2011, 11:54
Scusa ma così non funziona?


public partial class Form1 : Form
{
public Form1()
{
myTextBox.Text = new Textbox();;
}

Textbox myTextBox {get;set;}
}

private class MiaClasse
{
public MiaClasse(Form form)
{
myForm = form;
}


Form myForm;

public void ChangeTextbox(string text)
{
myForm.myTextBox = text;
}


}

Non non funzione assolutamente e poi sinceramente non ha neppure tanto senso visto che ti crei un instanza di tipo TextBox e scrivi sulla proprietà .Text di quell' istanza. Senza quindi identificare in alcun modo la casella di testo dove io concretamente voglio scrivere.

Il problema sta nela fatto che il .NET non permette di utilizzare in controllo da una Thread che non ha creato il controllo stesso.

Qualcuno sa darmi una mano? Perchè non riesco veramente ad uscire :)

s1m0_93
06-11-2011, 12:36
Capito. Comunque una piccola precisione. Quella textbox era appunto quella presente nel form, non un'altra a parte, che in genere viene dichiarata nel designer. L'unica cosa è che non sono stato a scrivere anche il codice necessario per inserirla nel form.

Nelle applicazioni multithread, quando un thread secondario vuole accedere a un controllo del form si utilizzando dei metodi appositi, magari riesci a usarli anche in questa situazione.
Al massimo prova a utilizzare gli eventi.

pare93
06-11-2011, 13:36
Sono proprio quei metodi appositi che sto cercando.

cdimauro
06-11-2011, 14:49
Allora ti serve BeginInvoke (http://msdn.microsoft.com/it-it/library/0b1bf3y3(v=vs.80).aspx) che inoltra una chiamata asincrona al thread che gestisce la UI, eseguendo il codice del delegate che gli passi.

Se la chiamata dev'essere sincrona, invece, si usa Invoke (http://msdn.microsoft.com/it-it/library/system.windows.forms.control.invoke(v=vs.80).aspx).