Stavo sviluppando un'applicazione WindowsForm in C #, con 2 moduli. Indipendentemente da ciò che entrambi facevano, in particolare, avevo bisogno di accedere ai valori in form2
e inviarli a form1
e viceversa. Perché ciò accada, ho trovato qualcuno parlare di sovraccarico del costruttore e ha funzionato per me come ho spiegato nel codice.
Form1:
namespace miniDldMngr
{
public partial class Main : Form
{
miniDldMngr.SettingsForm settingsForm; //Instantiate settingsForm
private void settingsToolStripButton_Click(object sender, EventArgs e)
{
settingsForm = new miniDldMngr.SettingsForm(this); //Create handle for Form1
settingsForm.ShowDialog(); //Form properties were changed to act like a dialog
}
Form2:
namespace miniDldMngr
{
public partial class SettingsForm : Form
{
private Main HandleToForm1; //local variable to store handle to Form1
public SettingsForm()
{
InitializeComponent();
}
public SettingsForm(Main frm1Handle) //overloaded constructor with handle to Form1
{
InitializeComponent();
HandleToForm1 = frm1Handle;
txtIni.Text = HandleToForm1.comboLoad.Text; //here's how i access controls on form1 for example, as long as modifiers are public
}
Ho trovato questa risposta su Stack Overflow e l'utente codesparkle ha commentato:
It's neither scalable nor OOP-like.
Il che mi porta a credere che potrebbe non essere stata la scelta migliore per risolvere il mio problema iniziale. (S) Ha inoltre aggiunto:
One approach is to create an event in the class that knows the information which needs to be shown. The form can then register one of its methods as an event handler. Once the information becomes available, the class notifies the Form by calling that handler with an argument containing the displayable information. The beauty of this approach is that the class is decoupled (not dependent on) the implementation of Form. The MVC and MVVM design patterns are other robust ways of doing it.
Ora mi rimangono alcune domande:
- Quali sono le implicazioni della procedura che ho usato?
- Perché non si tratta di un approccio orientato agli oggetti?
- Quale sarebbe la migliore pratica per inviare informazioni avanti e indietro tra classi / moduli?
- Come andresti a creare l'evento menzionato da codesparkle?
- Non so nulla dei pattern di progettazione MVC o MVVM, quindi alcuni link a una spiegazione strutturata sarebbero apprezzati.
Considera che sono molto nuovo alla programmazione e non ti capirò se parli come se sapessi cosa sto facendo. Gli esempi di codice funzionano con me, dal momento che posso testarli.