Beispiel: Windows Presentation Foundation GUI für eine Text Sampler Klasse

Von Mike Alexander Autor Feed 4. November 2011 16:10

Wie erstellt man in Windows 7 ein GUI in C#? Es ist mit der Windows Presentation Foundation (WPF), der Extensible Application Markup Language (XAML) und .NET nicht schwierig Windows Look & Feel Anwendungen zu erzeugen. Das Beispiel legt ein GUI um die TextSampler Klasse aus dem vorherigen Post.

Projektschritte:

Zuerst muss in VS eine neues Projekt aufgemacht werden: File – New Project – Visual C# – WPF Application. Danach fügen wir über Solution Explorer – PhraseSampler - References (right Click) – Add Reference die nötigen Assemblies hinzu. Examplarisch wählen wir PresentationFramework.dll (der komplette Source und Projektfiles ist unten downloadbar).

Nun fügen wir über using Statements die für das Projekt nötigen Namespaces hinzu, so dass die darin enthaltenen Types in Kurzform benutzt werden können. 2 daraus (kompletter Source anbei) sind:

using System.Windows.Controls;
using Microsoft.Win32;

System.Windows.Controls beinhaltet GUI Controls, Microsoft.Win32 die OpenFileDialog Klasse, welche wir unten verwenden. Die TextSampler Klasse fügen wir nicht als DLL sondern als Source über Solution Explorer – PhraseSampler – Add (right Click) – Class hinzu.

VS hat für uns schon über Templates C# und XAML Code Stubs erzeugt. WPF beruht auf einem Event-Driven Programmodell – und damit gibt es keine template Main Methode.

Von unserem VS-generiertem MainWindow.cs wechseln wir nun mittels Shift-F7 in die Designer View. Verwendet werden ein Button Widget hin zu einem File Selector Event Handler, mehrere TextBox Controls für die Darstellung des Text Corpus und der gefundenen Text Phrasen, einer Textbox für den Dateinamen und Slider Widgets für Parameter.

Das Binding zwischen dem XAML Button für die Dateiauswahl läuft über den Event Handler dateiauswahlbutton_Click.

private void dateiauswahlbutton_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
    Nullable<bool> rtn = ofd.ShowDialog();
...

Die C# Konstrukte try/catch/finally in Folge ermöglichen gut strukturiert Logik, Exception und z.B. Resource Release zu gruppieren. Zusätzlich zu Anwendungs-Exception Meldungen kann die .NET Exception Klasse aussagekräftige Fehlermeldungen zur Laufzeitfehler bringen. 

Schlussendlich wird in ProcessPhrases(), der Textcorpus über File.ReadAlltext in eine Textbox geladen, und TextSampler.SampleCorpus() über die Slider Parameter aufgerufen. Da der Output des TextSamplers eine Datei ist werden die selektierten Sample Phrasen daraus in die Resultate Textbox übernommen. 

if (sourcedateiname != null)
            {
                sourcetextcorpus.Text = File.ReadAllText(sourcedateiname);
                outdateiname = "phrases.txt";
                Microsoft.Research.TextSampler.SampleCorpus(
                    sourcedateiname,
                    (int)sliderTrials.Value,
                    (int)SliderPhrases.Value,
                    (int)SliderPhraseLength.Value, outdateiname);
                
                phrasesets.Text = File.ReadAllText(outdateiname);
            }

Screenshot zur Laufzeit:

phrasesamplergui

C# exkl. Sampler Klasse:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using Microsoft.Win32;
using Microsoft.Research;
 
 
namespace PhraseSampler
{
 
    public partial class MainWindow : Window
    {
 
        public string sourcedateiname { get; set; }
        public string outdateiname { get; set; }
 
        public MainWindow()
        {
            InitializeComponent();
        }
 
        public void ProcessPhrases()
        {
            if (sourcedateiname != null)
            {
                sourcetextcorpus.Text = File.ReadAllText(sourcedateiname);
                outdateiname = "phrases.txt";
                Microsoft.Research.TextSampler.SampleCorpus(
                    sourcedateiname,
                    (int)sliderTrials.Value,
                    (int)SliderPhrases.Value,
                    (int)SliderPhraseLength.Value, outdateiname);
                
                phrasesets.Text = File.ReadAllText(outdateiname);
            }
            else
                MessageBox.Show("Select a File to Process first"); 
        }
 
        private void dateiauswahlbutton_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
            Nullable<bool> rtn = ofd.ShowDialog();
 
             try
            {
                if (rtn == true)
                {
                    sourcedateiname = ofd.FileName;
                }
                ausgabebox.Text = sourcedateiname;
                ProcessPhrases();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error Processing " + sourcedateiname + "Exception " + ex.Message);
            }
            finally
            {
                File.Delete(outdateiname);
            }
        }
 
        private void rerun_Click(object sender, RoutedEventArgs e)
        {
            ProcessPhrases();
        }
    }
}

XAML Auszug:

<Window x:Class="PhraseSampler.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Phrase Sampler" Height="506" Width="974">
    <Grid DataContext="{Binding}">
        <Button Content="Datei auswählen" Height="22" HorizontalAlignment="Left" 
          Margin="41,36,0,0" Name="dateiauswahlbutton" VerticalAlignment="Top"
          Width="106" Click="dateiauswahlbutton_Click" />

Downloads:
Visual Studio 2010 Project Files

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading

Datenschutzhinweis: Sie stimmen durch "Kommentar speichern" der Speicherung Ihrer Angaben durch Microsoft Österreich für die Beantwortung der Anfrage zu. Sie erhalten dadurch keine unerwünschten Werbezusendungen. Ihre Emailadresse wird auf Ihren Wunsch dazu verwendet Sie über neue Kommentare zu informieren.

Microsoft respektiert den Datenschutz. Datenschutz & Cookies

Entwickler Wettbewerbe:

Wettbewerbe

Entwickler Events:

Developer Events

App für Windows 8, Windows Phone oder/und Azure? Diese Events zeigen Dir, wie es geht:

Mehr Information

Aktuelle Downloads

Visual Studio Downloads
 
Windows Azure Free Trial
Instagram
CodeFest.at on Facebook

Datenschutz & Cookies · Nutzungsbedingungen · Impressum · Markenzeichen
© 2013 Microsoft. Alle Rechte vorbehalten · BlogEngine.NET 2.7.0.0 · Diese Website wird für Microsoft von atwork gehostet.
powered by atwork