Esiste un modo standard per restituire valori dalle finestre di dialogo personalizzate in Windows Forms?

StackOverflow https://stackoverflow.com/questions/36984

  •  09-06-2019
  •  | 
  •  

Domanda

Quindi in questo momento il mio progetto ha alcune finestre di dialogo personalizzate che fanno cose come chiedere all'utente il suo compleanno o altro.In questo momento stanno solo facendo cose come impostare a this.Birthday proprietà una volta ottenuta una risposta (che è di tipo DateTime?, con il nulla che indica un "Annulla").Quindi il chiamante ispeziona il file Birthday proprietà della finestra di dialogo creata per capire cosa ha risposto l'utente.

La mia domanda è, esiste un modello più standard per fare cose del genere? So che possiamo sistemarci this.DialogResult per le cose OK/Annulla di base, ma esiste un modo più generale in Windows Form per far sì che un modulo indichi "ecco i dati che ho raccolto"?

È stato utile?

Soluzione

Direi che esporre le proprietà nella finestra di dialogo personalizzata è il modo idiomatico di procedere perché è così che lo fanno le finestre di dialogo standard (come Select/OpenFileDialog).Qualcuno potrebbe obiettare che è più esplicito e rivelatore di intenzioni avere un metodo ShowBirthdayDialog() che restituisca il risultato che stai cercando, ma seguire il modello del framework è probabilmente la strada saggia da percorrere.

Altri suggerimenti

esiste un modello più standard per fare cose del genere?

No, sembra che tu stia utilizzando l'approccio giusto.

Se la finestra di dialogo restituisce DialogResult.OK, presuppone che tutte le proprietà necessarie nella finestra di dialogo siano valide.

Per me attenersi alla finestra di dialogo che restituisce le risposte della finestra di dialogo standard e quindi accedere ai risultati tramite le proprietà è la strada da percorrere.

Due buone ragioni da dove mi trovo:

  1. Coerenza: fai sempre la stessa cosa con un dialogo e la natura stessa della domanda suggerisce che i modelli sono buoni (-:Anche se la domanda è anche se questo è un buon modello?
  2. Consente la restituzione di più valori dalla finestra di dialogo - ok c'è anche una discussione completamente nuova qui ma il pragmatismo applicato significa che questo è ciò che si vuole in alcune circostanze non è sempre appropriato o desiderabile impacchettare i valori solo in modo da poterli restituire tutto in una volta.

Anche il flusso della logica è carino:

if (Dialog == Ok)
{
    // Do Stuff with the entered values
}
else
{
    // Respond appropriately to the user cancelling the dialog
}

È una buona domanda - dovremmo mettere in discussione cose del genere - ma per me lo schema attuale è decente.

Murph

Per le finestre di dialogo di input modali, in genere sovraccarico ShowDialog e distribuisco i parametri per i dati di cui ho bisogno.

DialogResult ShowDialog(out datetime birthday)

In genere trovo che sia più facile da scoprire e comprendere rispetto a mescolare le mie proprietà con le oltre 100 esposte dalla classe Form.

Per i moduli, normalmente ho un controller e un'interfaccia IView che utilizza proprietà di sola lettura per passare i dati.

L'ho sempre fatto esattamente nel modo in cui lo descrivi.Sono curioso di vedere se esiste un approccio più accettato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top