2009-09-30 8 views
0

Lors de l'écriture application WinForms avec une séparation appropriée entre Affichage- et contrôleur/Présentateur fonctionnalité, je me surprends souvent à écrire du code comme ceci:C#/WinForms: Ai-je besoin de IWin32Windows?

public void class SomeView:Form{ 
    private void loadFileButton_Click(object sender, EventArgs e) 
    { 
    _loadFileAction.Execute(this); 
    } 
} 

public void class LoadFileAction:Action{ 
    public override void Execute(IWin32Window owner){ 
    // ... 
    string file = _fileSelector.SelectFile(owner); 
    } 
} 

public void class FileSelector:IFileSelector{ 
    public override void SelectFile(IWin32Window owner){ 
    OpenFileDialog dialog = new OpenFileDialog(); 
    dialog.ShowDialog(owner); 
    //... 
    } 
} 

ou d'une autre variante de passage autour de la fenêtre correcte pour ouvrir des sous-boîtes de dialogue .

Je suis souvent tenté d'ignorer les poignées de fenêtre et d'utiliser toujours les méthodes sans paramètre ShowDialog() - qui doivent simplement utiliser la fenêtre active.

Est-ce que quelqu'un a des expériences en utilisant des architectures similaires? Que faire?

Répondre

0

Vous pouvez extraire les boîtes de dialogue et les placer derrière une façade. Cette façade peut alors rechercher le formulaire actif en cours et l'utiliser, ou n'utiliser rien automatiquement. Ensuite, vous n'avez pas besoin de le transmettre.