Laden...

Wie Datei beim WPF-Start öffnen?

Erstellt von Paderman vor 2 Jahren Letzter Beitrag vor 2 Jahren 523 Views
P
Paderman Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren
Wie Datei beim WPF-Start öffnen?

Hallo,
ich hoffe dass ich hier richtig bin.

Ich habe in C# (WPF) einen TextEditor drin, welcher mit dem Öffnen-Dialog wie als auch Drag & Drop die Datei lädt.

Leider fand ich keine Info, wie eine Datei geöffnet werden kann, wenn die Datei zum Beispiel in die compilierte exe gezogen wird...

Wenn ich die Datei auf die exe ziehe, bleibt der TextEditor leer, aber ich möchte diesen gerne genauso mit den Daten laden können, die mit Öffnen-Dialog und Drag & Drop funktioniert.

Über eine Idee wäre ich sehr dankbar, da viele Anwendungen standardmäßig es können, nur meine Anwendung noch nicht.

O
79 Beiträge seit 2011
vor 2 Jahren

Kommandzeilen-Parameter sind dein Freund 😉

4.931 Beiträge seit 2008
vor 2 Jahren

Hallo und willkommen,

der komplette Pfad der Datei wird dabei als (erster und einziger) Kommandozeilenparameter übergeben, d.h. lies diesen aus und zeige dann dessen Inhalt an, s.a. Main() and command-line arguments (bes. der Code unter "Command-Line Arguments") sowie Die Argumente von der Kommandozeile?

P
Paderman Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren

Vielen Dank für die Hilfe 🙂

Die Console-Variante funktioniert ja sehr gut mit einer Beispiel.txt -> Beispiel.exe, diese zeigt den Inhalt der Textdatei in der Console ja an, aber wie setze ich es aber so um, dass der Inhalt nicht in der Console ausgegeben wird, sondern in das grafische Steuerelement "TextBox" 🤔
("Texteditor" stammt aus AvalonEdit, die für das Syntax highlighting zuständig ist)

Ich habe das Beispiel in meinem Projekt zwar übernommen, nun habe ich unter Projekt-Eigenschaften entweder die "Beispiel.app" oder das "Beispiel.Programm"... 🙄

Das Projekt was ich habe ist ja keine Console-Variante, sondern grafisch, nur wie könnte man der grafischen Oberfläche mitteilen, dass auch eine Beispiel.txt -> MeinProjekt.exe in das grafische Steuerelement geladen/angezeigt wird, wie es bereits ja mit Drag & Drop und dem Dialog "Öffnen" funktioniert?

Wenn ich MeinProjekt.exe in der Console starte und dazu eine Beispiel.txt mit anhänge, bleibt die Console ja leer und startet gleich die GUI, aber ohne angehängter Beispiel.txt... 🤔

Leider bin ich etwas planlos...

P
Paderman Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren

Hallo und vielen Dank für die Hilfe 🙂

Ich habe mir aus dem Beispielcode ein Beispielprojekt gebaut und es funktioniert, demzufolge dürfte es in meinem Projekt auch funktionieren 👍 demzufolge deckt mein Projekt nun folgendes ab: Datei Öffnen, Drag & Drop und Startup Argumente 😉

Hätte ich zuvor dem korrekten Begriff gehabt, dann hätte ich ja eigentlich was finden sollen 😁

Zumindest gibt es eine Art 2 Varianten dieser Art, einmal für Console und WPF, C# 😲 🙂

P
Paderman Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren
Kleine Frage in Sachen get/set und Variable

Leider habe ich doch noch eine Frage zu WPF: Startup Argumente verwenden: wie kann ich den Pfad der in set zum Beispiel in einem Steuerelement wie ShowPath.Text = sFolder_Path; angezeigt wird, als Variable ab public MainWindow() verwenden, also außerhalb von public string Startup_Folder_Path? Ich bräuchte den Wert, da noch was anderes ausgeführt werden muss und der übergebene Wert wird dazu benötigt. Leider fand ich noch nichts dazu. Oder anders gefragt, wie könnte der übergebene Wert gespeichert werden, da ich für das Projekt einen Timer verwenden muss, und dieser benötigt dazu den gespeicherten Pfad, der zuletzt per Parameter übergeben wurde...

Teil-Code aus der MainWindow.xaml.cs


        public string Startup_Folder_Path
        {
            get
            {
                return sFolder_Path;
            }

            set
            {
                sFolder_Path = value;
                ShowPath.Text = sFolder_Path;
            }
        }

Vielen Dank 🙂 😘

4.931 Beiträge seit 2008
vor 2 Jahren

Dafür ist doch der Getter da (bzw. innerhalb der Klasse kannst du auch direkt auf die private Variable sFolder_Path zugreifen).

Ansonsten zeige mal Code, was du genau meinst.

P
Paderman Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren

OK, dies ist nur ein Beispiel 😉


    public partial class MainWindow
    {
        //--< Privat >--
        private String sFolder_Path = "";
        //--< Privat >-

        //--< Properties >--
        public string Startup_Folder_Path
        {
            get
            {
                return sFolder_Path;
            }

            set
            {
                sFolder_Path = value;
                // ShowPath.Text = sFolder_Path; /* Ausgabe bzw. Wert soll außerhalb übergeben werden können */
            }
        }
        //--</ Properties >--

            #region ---------< Region: Window >---------
            //------< Window >------
        public MainWindow()
        {
            InitializeComponent();

         /* folgende Zeile ist nur ein Beispiel, nur bleibt hier sFolder_Path leider leer, da dieser den Wert aus sFolder_Path nicht erhält */
            ShowPath.Text = sFolder_Path;

        }
        //------</ Window >------
        #endregion ---------</ Region: Window >---------

In einer neuen Variable wird auch nichts gespeichert...

Leider kenne ich mich damit noch nicht aus 😠

Demzufolge müsste es vermutlich so ablaufen:
Wenn die Anwendung einen Parameter zum Beispiel einer Datei erhält, soll der komplette Pfad, solange die Anwendung läuft, zwischengespeichert werden, da der Inhalt einer Datei in einer TextBox ausgegeben wird, und per Timer wird die Datei neu geladen. Nach Beenden der Anwendung wird der zwischengespeicherte Wert geleert 🙂 so die Theorie 😉

4.931 Beiträge seit 2008
vor 2 Jahren

Im Beispiel wird der Wert mittels


MainWindow mainWindow = new MainWindow();
mainWindow.Startup_Folder_Path = start_Folder;
mainWindow.Show();

gesetzt (also nach dem Konstruktor per Setter).

Wenn du jedoch schon im Konstruktor auf diesen Wert zugreifen möchtest, dann übergebe ihn als Parameter:


public MainWindow(string folderPath)
{
  Startup_Folder_Path = folderPath;
  // ...
}

Aber alles, was du im Konstruktor machen möchtest, kannst du doch auch in dem Setter von Startup_Folder_Path implementieren. Oder warum hast du ShowPath.Text dorthin verschoben?

P
Paderman Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren

Vielen Dank für deine Hilfe 🙂

Ich bin leider Anfänger und bin schon froh dass was funktioniert 😉

Ich habe noch mal ein frisches Test-Projekt erstellt, nur gibt es dort Probleme, die ich leider nicht lösen kann 😠

Wenn ich in MainWindow.xaml.cs

public MainWindow(string folderPath)
    {
        Startup_Folder_Path = folderPath;
    }

einfüge, erscheint in der App.xaml.cs eine Fehlermeldung> Fehlermeldung:

Es wurde kein Argument angegeben, das dem formalen Parameter "folderPath" von "MainWindow.MainWindow(string)" entspricht. MainWindow(); wird als Fehler angesehen.

Leider bin ich etwas ratlos 😠

Sobald string folderPath enthalten ist, erscheint diese Fehlermeldung 😭

4.931 Beiträge seit 2008
vor 2 Jahren

Weißt du denn nicht, was ein Konstruktor ist?

Ich habe doch geschrieben, daß du dann den Parameter übergeben sollst, also


MainWindow mainWindow = new MainWindow(start_Folder);

Jedoch sehe ich immer noch keinen Sinn dadrin, daß du dies umschreiben möchtest und nicht den Setter der Eigenschaft benutzt (wie im Beispiel).