Come posso fare clic su un pulsante in un modulo e aggiornare il testo in un controllo di testo in un altro modulo?Propagazione di eventi da un modulo a un altro Modulo in C#
risposta
Se si sta tentando di utilizzare WinForms, è possibile implementare un evento personalizzato nel modulo "figlio". Potresti attivare quell'evento quando è stato fatto clic sul pulsante nel tuo modulo "figlio".
Il tuo modulo "padre" dovrebbe quindi ascoltare l'evento e gestire il proprio aggiornamento TextBox.
public class ChildForm : Form
{
public delegate SomeEventHandler(object sender, EventArgs e);
public event SomeEventHandler SomeEvent;
// Your code here
}
public class ParentForm : Form
{
ChildForm child = new ChildForm();
child.SomeEvent += new EventHandler(this.HandleSomeEvent);
public void HandleSomeEvent(object sender, EventArgs e)
{
this.someTextBox.Text = "Whatever Text You Want...";
}
}
Approssimativamente; l'unico modulo deve avere un riferimento ad un oggetto sottostante che contiene il testo; questo oggetto dovrebbe attivare un evento sull'aggiornamento del testo; il TextBox in un altro modulo dovrebbe avere un delegato che si iscrive a quell'evento, che scoprirà che il testo sottostante è stato modificato; una volta informato il delegato di TextBox, TextBox deve interrogare l'oggetto sottostante per il nuovo valore del testo e aggiornare il TextBox con il nuovo testo.
Presupposto per WinForms;
Se la casella di testo è associata a una proprietà di un oggetto, è necessario implementare l'interfaccia INotifyPropertyChanged sull'oggetto e notificare il valore della stringa da modificare.
public class MyClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string title;
public string Title {
get { return title; }
set {
if(value != title)
{
this.title = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs("Title"));
}
}
}
Con quanto sopra, se si associa alla proprietà titolo - l'aggiornamento passerà attraverso 'automaticamente' a tutte le forme/caselle di testo che si legano con l'oggetto. Vorrei raccomandare questo sopra inviando eventi specifici, poiché questo è il modo comune di notificare il binding di aggiornamenti alle proprietà dell'oggetto.
Moduli di Windows o moduli Web? –
Win form in .net –