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.
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?
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...
Dafür gibt es bei WPF das Application.Startup Ereignis, s.a. WPF: Startup Argumente verwenden.
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# 😲 🙂
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 🙂 😘
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.
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 😉
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?
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 😭
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).