Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie Datei beim WPF-Start öffnen?
Paderman
myCSharp.de - Member



Dabei seit:
Beiträge: 10

Themenstarter:

Wie Datei beim WPF-Start öffnen?

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Paderman am .
private Nachricht | Beiträge des Benutzers
OlafSt
myCSharp.de - Member



Dabei seit:
Beiträge: 75
Herkunft: HH

beantworten | zitieren | melden

Kommandzeilen-Parameter sind dein Freund
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4134

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
Paderman
myCSharp.de - Member



Dabei seit:
Beiträge: 10

Themenstarter:

beantworten | zitieren | melden

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...
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Paderman am .
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4134

beantworten | zitieren | melden

Dafür gibt es bei WPF das Application.Startup Ereignis, s.a. WPF: Startup Argumente verwenden.
private Nachricht | Beiträge des Benutzers
Paderman
myCSharp.de - Member



Dabei seit:
Beiträge: 10

Themenstarter:

beantworten | zitieren | melden

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#
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Paderman am .
private Nachricht | Beiträge des Benutzers
Paderman
myCSharp.de - Member



Dabei seit:
Beiträge: 10

Themenstarter:

Kleine Frage in Sachen get/set und Variable

beantworten | zitieren | melden

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
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Paderman am .
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4134

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Paderman
myCSharp.de - Member



Dabei seit:
Beiträge: 10

Themenstarter:

beantworten | zitieren | melden

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
Dieser Beitrag wurde 6 mal editiert, zum letzten Mal von Paderman am .
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4134

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Paderman
myCSharp.de - Member



Dabei seit:
Beiträge: 10

Themenstarter:

beantworten | zitieren | melden

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
Fehler
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
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4134

beantworten | zitieren | melden

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).
private Nachricht | Beiträge des Benutzers