Werde ich mir mal ansehen. Klingt interessant.
Eigentlich wollte ich nur den Get String in der TextBox anzeigen lassen. Später kam dann die Idee auch die Warnungen und Fehler dort anzuzeigen. Ohne das jedes mal eine MessageBox erscheint. Weil eigentlich das Programm nur im Systemtray ist und im Hintergrund Daten in eine Datenbank schreibt. Das Eigentliche Programm ist dann separat.
-
Ich habe gestern abend auch noch mal einen Versuch unternommen, Nur den Error Log, der ja schon einmal so funktioniert hat, wie ich es wollte, wieder in die Main zu integrieren. Dan fliegt mir die Problematik mit den Static anweisungen um die Ohren.
Ich bin gerade am Überlegen, alles wieder in die Main zu packen. wären dann am ende knapp 1600 Zeilen. Oder sogar um zu steigen auf php. XD
Würde allerdings gerne bei C# bleiben
Hi, das mit dem Main hab ich mir schon gedacht. Ohne diesem Aufruf bekomme ich den Fehler:
CS0120 (Für das nicht statische Feld, die Methode oder die Eigenschaft "Main.TextboxAdd(string)" ist ein Objektverweis erforderlich.)
Ich hab mir daher mal das mit den Ereignissen angesehen. Allerdings ist das Glaube ich für mich nicht so ganz Passend. Da die Funktion aus der Main und auch aus den anderen Klassen wie z.b. HttPServer.startListeningForConnection() aufgerufen wird. Und alle sollen in die main.mtbWebhook.Text schreiben.
Im Anhang hab ich nen Bild angefügt, vielleicht Zeigt das etwas besser, wie der Daten Verlauf ist. Daas Speichern in die Datei funktioniert super. Nur eben nicht die TextBox.
Da ich das mit dem Event nicht so ganz verstanden hatte, hab ich mir da auch den Code von Herbivore (https://mycsharp.de/forum/threads/8799/loesung-problem-mit-eventhandler-fertige-code-snippets-inkl-erklaerung) und Coding mit Jannik (https://www.youtube.com/watch?v=ucpoIoOoe_0) angesehen. Jetzt glaube ich hab ich es so langsam verstanden.
Moin moin zusammen,
ich versuche aus einer Klasse eine Textbox mit Daten zu füllen. So als Log anzeige. Allerdings werden nach dem Umstellen der Log funktion in eine Separate Klasse keine Daten mehr in der Textbox angezeigt.
Kurz vorweg, wofür das Programm ist:
Ich habe eine Programm, das auf HttpGet regiert und JSon Dateien in eine Datenbank schreiben soll. Jetzt ist der Quellcode zu Lang geworden und ich habe vieles ausgelagert in separate Klassen. Unteranderem auch das erstellen der Log Informationen. Diese funktion wird überall im Quellcode aufgerufen. Verarbeitet die Infos, schreibt alles in eine Datei und am Ende sollen diese Infos auch in eine große Multiline Textbox geschreiben werden.
Ich verwende den MaterialSkin 2.2.3.1. Daher eine Multiline Textbox und keine Richt Text Box (Wollte erst die RTF verwenden wegen der Schriftfarbe, dann funktioniert allerdings das Design nicht mehr. Umschalten von dem Dark Light Theme)
Der Code:
Der aufruf der Log funktion:
CsLogs.ErrorLog(1, "Fehler Text", ex);
Die Log funktion:
public static void ErrorLog(int Log, string Message, System.Exception ex)
{
string text = null;
string exreg = null;
if (ex != null)
{
Regex reg = new Regex("\n");
exreg = reg.Replace(ex.ToString(), "\n\t");
}
if (Log == 1)
{
// Error Generator
text = DateTime.Now.ToString("HH:mm:ss") + " | Error | " + Message + "\n";
text += "\t" + exreg;
}
if(Log == 2)
{
// Warnung Generator
text = DateTime.Now.ToString("HH:mm:ss") + " | Warning | " + Message + "\n";
text += "\t" + exreg;
}
string filePath = @"..\Logs\ErrorLog.txt";
// Schreiben der Logs in eine Text Datei, entfernt damit der Code klein und übersichtlich bleibt. Hier kommt alles an wie es soll
Main main = new Main();
if (Global.LogLevel >= Log)
{
main.Webhook = text;
//main.TextboxAdd(text);
}
}
In der Main die Publik deklaration der Webhook Variable:
public string Webhook
{
get { return _Webhook; }
set
{
_Webhook = value;
MessageBox.Show(Webhook); // Zum Prüfen ob überhaupt Daten ankommen. Und es funktioneirt
mtbWebhook.Text += Webhook; // Beim Debug stehen hier auf beiden Seiten die geünschten Daten. Es wird aber nichts angezeigt.
// in der MaterialSkin Dll sind 2 Multiline Textboxen. Bei der 2ten TextBox wurde nur der Name geändert.
mtbWebhook2.Text += Webhook; // Beim Debug stehen hier auf beiden Seiten die geünschten Daten. Es wird aber nichts angezeigt.
}
}
Was ich auch schon versucht habe über eine funktion das zu regeln.
public void TextboxAdd(String Value)
{
mtbWebhook.Invoke((MethodInvoker)delegate () {
mtbWebhook.Text = Value;
});
}
Auch ohne dem verweis auf die Main in der CsLog Klasse kommen die Daten in die Variable. Aber es erscheint nichts in der Text Box.
Stand aktuell:
Die Daten sind in der Main (Hieß vorher Form1) in der Variable mtbWebhook. Es wird auch kein Fehler beim Kompilieren angezeigt. Warnungen habe ich nur zu Variablen, die deklariert sind, aber nicht benutzt werden. Aber in der Textbox erscheint kein Text. Obwohl in der mtbWebhook.Text der richtige text steht.
Das ist der Grund warum ich nachgefragt habe. 😁
Dein letzter Punkt hört sich gut an. Ich glaube der wird es dann werden.
Vielen Vielen Dank für deine Antwort!
Moin moin zusammen,
ich schreibe gerade ein Programm, das auf einem USB Stick laufen soll. Ich benötige aber zur Laufzeit einige Variablen, die ich gerne in einer ini Datei hätte. Es soll nichts auf dem Computer selber gespeichert werden.
Wie ist dafür die beste Vorgehensweise? Die Settingsdatei wird ja unter AppData gespeichert. Bei der Resourcen Datei sollen keine Daten während der Laufzeit geändert werden. Die AppData Datei scheint mir auch nicht so das richtige zu sein. Zumal der Name sich bei mir aus irgend einem Grund mit Projekt.dll.config zusammen setzt und nicht mit Projekt.exe.config. Und der User soll auch in dieser Datei Arbeiten können. Ich hätte dort auch gerne mehrere Gruppen die ini Datei besteht bei mir aus 6 Gruppen.
Und ich würde gerne das Programm Verzeichniss selber so klein wie möglich halten. Am liebsten wäre mir nur eine Datei, die dann beim ersten starte die ini oder welcher Datei auch immer erst erstellt.