2017-04-18 2 views
-1

Ich bin ein absoluter Anfänger in WPF-Anwendungen, also sei gnädig.WPF Wie man eine Void-Methode in einem Textfeld ausgibt

Ich habe versucht, eine Konsole-Anwendung auf WPF neu zu schreiben. Der Punkt ist, wie man eine Methode in wpf schreibt, die zuvor eine void-Methode war.

Ich kommentieren den Code, ich denke, es ist einfacher zu verstehen.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
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 Easy2AcquireCom; 
using System.ComponentModel; 

namespace WPF_Polling 
{ 
    /// <summary> 
    /// Interaktionslogik für MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 

     IDeviceManager DeviceManager = new DeviceManager(); 
     IDevice TheDevice = new Device(); 


     Initialize initialisieren = new Initialize(); 


     public MainWindow() 
     { 
      InitializeComponent(); 

      this.DataContext = initialisieren; 
      initialisieren.InitializeDeviceManager(TheDevice, DeviceManager); 
      ListPrefix(); //???? Do I have to give the parameters? 

     } 

     private void ListPrefix(object sender,  DependencyPropertyChangedEventArgs e) // that was a helper DataContextChanged helper 
     { 
      initialisieren.ListDevices(TheDevice,"device"); 
     } 
    } 
    public class Initialize 
    { 

     public void InitializeDeviceManager(IDevice thedevice, DeviceManager devicemanager) 
     { 
      try 
      { 
       devicemanager.Initialize(""); 
       int result = devicemanager.Setup(0); 
       thedevice = devicemanager.GetCurrentDevice(); 
       thedevice.ClearComponentFilter(); 
      } 
      catch (Exception error) 
      { 
      } 
     } 
     public void ListDevices(IDevice theDevice, string prefix) 
     { 
      string[] Tags = (string[]) theDevice.GetTagsByPrefix(prefix); 
      int Index = 1; 

      foreach (string Tag in Tags) 
      { //I want to give out These Things in a TextBox or block 
       string Name = theDevice.GetTagName(Tag); 
       //Console.Write(" "); 
       //Console.Write(Index); 
       //Console.Write(" "); 
       //Console.Write(Tag); 
       //Console.Write(" ("); 
       //Console.Write(Name); 
       //Console.WriteLine(")"); 

       Index = Index + 1; 
      } 

     } 

    } 
} 
+0

Bitte sehen Sie meine bearbeitete Antwort. – mm8

Antwort

0

definieren TextBlock in XAML-Markup:

<TextBlock x:Name="txt" /> 

... und fügen Sie Text auf seine Text Eigenschaft:

foreach (string Tag in Tags) 
{ 
    string Name = theDevice.GetTagName(Tag); 
    txt.Text += " "; 
    txt.Text += Index; 
    txt.Text += " "; 
    txt.Text += Tag; 
    txt.Text += " ("; 
    txt.Text += Name; 
    txt.Text += ")"; 
    Index = Index + 1; 
} 

Und man konnte die ListDevices Methode direkt in der Aufruf Konstruktor des Fensters, anstatt zu versuchen, den Ereignishandler aufzurufen:

public partial class MainWindow : Window 
{ 
    IDeviceManager DeviceManager = new DeviceManager(); 
    IDevice TheDevice = new Device(); 
    Initialize initialisieren = new Initialize(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     this.DataContext = initialisieren; 
     initialisieren.InitializeDeviceManager(TheDevice, DeviceManager); 
     initialisieren.ListDevices(TheDevice, "device"); 
    } 

    private void ListPrefix(object sender, DependencyPropertyChangedEventArgs e) 
    { 
     initialisieren.ListDevices(TheDevice, "device"); 
    } 
} 

Edit: Die Initialize Klasse kann nicht die TextBlock zugreifen, die in der MainWindow Klasse definiert ist, es sei denn Sie irgendwie einen Verweis auf die MainWindow Klasse der Initialize Klasse übergeben:

public partial class MainWindow : Window 
{ 
    Initialize Initialize; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     Initialize = new Initialize(this); 
     Initialize.ListDevices("devices"); 
    } 
} 

public class Initialize 
{ 
    private readonly MainWindow _window; 
    public Initialize(MainWindow window) 
    { 
     _window = window; 
    } 
    public void ListDevices(string prefix) 
    { 
     string[] Tags = { "hallo", "devices", "Test" }; 
     int Index = 1; 


     foreach (string Tag in Tags) 
     { 
      _window.Txt.Text += " "; 
      _window.Txt.Text += Index; 
      _window.Txt.Text += " "; 
      _window.Txt.Text += Tag; 
      _window.Txt.Text += " ("; 
      _window.Txt.Text += ")"; 
      Index = Index + 1; 
     } 
    } 
} 
+0

Visual Studio sagt "Kann Symbol txt nicht auflösen. * Ich nannte die Methode ListDevices in meinem öffentlichen Hauptfenster und in der Methode habe ich Ihre Lösung eingefügt sowie die TextBox den Namen txt – Kleinstein11

+0

Haben Sie x: Name =" txt "Zum TextBlock in Ihrer MainWindow.xaml-Datei, wie ich es vorgeschlagen habe? – mm8

+0

Ja, habe ich. Vielleicht muss ich den TXT in meinem Hauptfenster als Objekt initialisieren? – Kleinstein11

0

ich ein RichTextBox hinzufügen würde aus dem Designer und fügen Sie Text aus dem Code an ihn an.