Benutzer mit den meisten Antworten
RichTextBox von anderer Klasse editieren

Frage
-
Hallo zusammen,
ich habe (mal wieder...) zwei Fragen.
1. ich versuche mich gerade an einer Form die eine Art "Debugconsole" darstellt. Dort werden auf einer RichTextBox verschiedene Dinge ausgegeben.
Dies funktioniert auch gut, so lange die Einträge die ich per AppendText("") einfüge in derselben Klasse sind in der ich Form.Show() aufrufe.
Wenn ich nun in einer anderen Klasse versuche einen Eintrag hinzuzufügen passiert allerdings nichts. Ich hole mir die Form mit showDebug debug = new showDebug(); in die zweite Klasse. Daraufhin versuche ich mit debug.rtbConsoleDebug.AppendText(""); einen Text anzuhängen. Allerdings passiert daraufhin einfach nichts.
Es wird keine Fehlermeldung oder ähnliches ausgegeben, es passiert nur einfach nichts.Irgendeine Idee was ich machen muss damit ich die RichTextBox in meiner anderen Klasse verändern kann?
showDebug ist die Debug Form
rtbConsoleDebug ist die RichTextBox2. Mein Programm führt eine Java Anwendung aus, bisher allerdings mit der java.exe.
Mein Ziel ist es allerdings das ich dies über die Console starte und der Output der Anwendung dann automatisch in die RichTextBox geschrieben wird. Derzeit führe ich nach dem process.Start(); ein process.WaitForExit(); aus da nach beenden der Java Anwendung noch etwas erledigt werden soll.Falls ich etwas vergessen haben sollte, sagt es mir bitte.
Gruß
Christian
Viele Grüszlig;e aus Stuttgart
Christian Holzwarth
Antworten
-
Hallo,
zu 1.
Wenn du new XYZ() aufrufst, wird eine neue Instanz von XYZ erstellt. Diese ist vollkommen unabhängig von der zuvor erstellten Instanz. Du musst also auf die selbe Form zugreifen.
Ich nehme mal an, das du in Main die Debug-Konsole erstellst und anzeigst. Dann kannst du dir dort den Verweis auf die Form-Instanz in einer statischen Klasse ablegen. Da statische Klassen überall die selben Daten enthalten, erscheinen die Texte dann auch in der Debug-Form:static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);
//Nachfolgende 2 Zeilen nur hier aufrufen. Sonst nicht mehr! CommonData.Debug = new DebugForm();//Form erzeugen CommonData.Debug.Show();//Form anzeigen CommonData.Debug.Append("Debug-Form angezeigt");//Deine Methode zum ausgeben einer Nachricht aufrufen, diese Zeile funktioniert nun überall im Projekt. Application.Run(new Form1()); } } public static class CommonData { public static DebugForm Debug { get; set; }//Instanz der Debugform, die wärend der Laufzeit immer die gleiche ist }zu 2.
Ich kenne mich nicht wirklich mit Java aus, deswegen kann ich da auch nicht viel zu sagen. Wenn Java-Konsolen über das Konsolensystem von Windows funktionieren, dürfte dieser Weg funktionieren. Sonst kann ich dir bei diesem Problem leider nicht weiter helfen.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 13. März 2014 21:32
- Als Antwort markiert Ciprian Bogdan Freitag, 14. März 2014 08:43
Alle Antworten
-
Hallo,
zu 1.
Wenn du new XYZ() aufrufst, wird eine neue Instanz von XYZ erstellt. Diese ist vollkommen unabhängig von der zuvor erstellten Instanz. Du musst also auf die selbe Form zugreifen.
Ich nehme mal an, das du in Main die Debug-Konsole erstellst und anzeigst. Dann kannst du dir dort den Verweis auf die Form-Instanz in einer statischen Klasse ablegen. Da statische Klassen überall die selben Daten enthalten, erscheinen die Texte dann auch in der Debug-Form:static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);
//Nachfolgende 2 Zeilen nur hier aufrufen. Sonst nicht mehr! CommonData.Debug = new DebugForm();//Form erzeugen CommonData.Debug.Show();//Form anzeigen CommonData.Debug.Append("Debug-Form angezeigt");//Deine Methode zum ausgeben einer Nachricht aufrufen, diese Zeile funktioniert nun überall im Projekt. Application.Run(new Form1()); } } public static class CommonData { public static DebugForm Debug { get; set; }//Instanz der Debugform, die wärend der Laufzeit immer die gleiche ist }zu 2.
Ich kenne mich nicht wirklich mit Java aus, deswegen kann ich da auch nicht viel zu sagen. Wenn Java-Konsolen über das Konsolensystem von Windows funktionieren, dürfte dieser Weg funktionieren. Sonst kann ich dir bei diesem Problem leider nicht weiter helfen.
Koopakiller [kuːpakɪllɐ] (Tom Lambert)
Webseite |
Code Beispiele |
Facebook |
Twitter |
Snippets
C# ↔ VB.NET Konverter
Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 13. März 2014 21:32
- Als Antwort markiert Ciprian Bogdan Freitag, 14. März 2014 08:43
-
Hi,
Hat Dir die Antwort von Tom geholfen ? Wenn ja - bitte markiere diese "als Antwort".
Danke und Gruß,
Ciprian
Ciprian Bogdan, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hi,
Hat Dir die Antwort von Tom geholfen ? Wenn ja - bitte markiere diese "als Antwort".
Danke und Gruß,
Ciprian
Ciprian Bogdan, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
Hi,
sorry komme erst jetzt zum Antworten :/
Und ja. Bei 1. hat er mir (mal wieder) geholfen, das läuft jetzt. Danke dafür schonmal.
An meinem Punkt 2 verzweifle ich allerdings... Ich bekomme es nicht fertig das der Output der Java Console (ja wird ganz normal auf der Windows CMD ausgegeben) direkt an die RichTextBox übergeben wird.
Habe es jetzt einmal so versucht, die Anwendung startet auch, die Console bleibt wie gewünscht im Hintergrund (unsichtbar). Aber der Output der Console wird nicht in meiner RichTextBox ausgegeben:
start.StartInfo.CreateNoWindow = true; start.StartInfo.RedirectStandardOutput = true; start.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler); start.Start(); start.BeginOutputReadLine(); while (!start.HasExited) { Application.DoEvents(); // This keeps your form responsive by processing events } // und so lautet der Eventhandler private static void SortOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) { if (!String.IsNullOrEmpty(outLine.Data))
{string newLine = outLine.Data.Trim() + Environment.NewLine; MethodInvoker append = () => CommonData.debug.rtbDebugConsole.AppendText(newLine); CommonData.debug.rtbDebugConsole.BeginInvoke(append); } }
Allerdings passiert so genau gar nichts... und ich weis grad nicht so wirklich was ich falsch mache.
Gruß
Christian
Viele Grüszlig;e aus Stuttgart
Christian Holzwarth -
Ok, moment mein Fehler.
Die Java Consolenausgabe scheint doch anders zu sein... habe es soeben mit einem normalen Ping versucht und dieser wird ohne Probleme ausgegeben.
Dachte zuerst dies würde wie eine normale Console gehandhabt... wohl nicht.
Hat jemand eine Idee wie ich eine Java Consolen Ausgabe so abfangen kann wie wenn ich einen normalen Konsolenbefehl ausführe?
Gruß
Christian
Viele Grüße aus Stuttgart
Christian Holzwarth
- Bearbeitet Christian Holzwarth Donnerstag, 13. März 2014 21:31