2009-05-06 8 views
0

Ich bin neu bei WPF und versuche, meine erste WPF Desktop-Anwendung mit VC# Express zu machen.C#/WPF: Suchen Sie nach einem Dateidialog

Ich versuche, drei offene Dateidialoge mit Textfeldern zu erstellen, die den angegebenen Pfad anzeigen, wenn der Benutzer eine Datei auswählt. Ich habe funktionierenden Code gefunden, um das Dialogfeld mit einem Klick auf eine Schaltfläche erscheinen zu lassen, aber wie bekomme ich ein Textfeld, um den Dateipfad zu aktualisieren/zu binden?

Etwas ähnlich wie die Datei Eingabefelder in HTML arbeiten wäre ideal.

...

EDIT:

Okay, ich die Post knapp unter mir gelesen und die Lösung gefunden ...

Nun, wie etwa Konsolenausgabe in ein Textfeld umgeleitet?

+0

Warum möchten Sie die Konsolenausgabe in eine Textbox umleiten? Diagnose? Protokollierung? – flq

+1

Bitte stellen Sie verschiedene Fragen in einer anderen Frage. :) –

Antwort

0

Wenn ich Sie richtig verstehe Verwenden Sie den FileDialog.FileName auf den vollständigen Pfad .. und binden Sie das an Ihr Textfeld. 76mel

1

Um Ihre Frage zu Umleiten Konsolenausgabe zu beantworten:

Sie werden den Code besser dran Ändern eines Ereignisses mit der Zeichenfolge, die Sie ausgeben wollen abzufeuern. Fügen Sie dann in der Benutzeroberfläche einen Handler für dieses Ereignis hinzu und aktualisieren Sie das Textfeld im Handler.

Um ein Ereignis hinzuzufügen, so etwas wie dieser Code in Ihrer Verarbeitungsklasse deklariert:

public event EventHandler<StringEventArgs> Process_Message; 

wo StringEventArgs eine Klasse auf EventArgs, den die Nachricht wickelt für das Senden basiert.

das Ereignis ausgelöst, so etwas wie dieser Code in Ihrer Verarbeitungsklasse hinzu:

Process_Message(this, new StringEventArgs(message)); 

Um eine Nachricht Handler in Ihrer UI-Klasse anhänge:

process.Process_Message += Process_Message; 

das Ereignis behandeln so etwas wie diese hinzufügen Code zu Ihrer UI-Klasse:

private void Process_Message(object sender, StringEventArgs e) 
{ 
    Action action =() => UpdateStatus(e.Message); 
    { 
     Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, action); 
    } 
    else 
    { 
      action(); 
    }   
} 

Sie müssen den Threading-Test als U tun Ich kann nicht von einem anderen Thread aktualisiert werden.

Dann wird die UpdateStatus Methode:

private void UpdateStatus(string message) 
{ 
    statusTextBox.Text = message; 
} 

Natürlich müssen Sie die Dinge benennen, um Ihre Anwendung geeignet sein.

Nachschlagen Ereignisse und EventArgs in der MSDN.

Verwandte Themen