Entwickler-Ecke

WinForms - Etwas beim Starten der Anwendung ausführen


DenniZ - So 11.03.07 01:01
Titel: Etwas beim Starten der Anwendung ausführen
Hi,

ich schon wieder *g*... wollte nicht im alten Thread weiterschreiben, wäre OT

Also, ich möchte beim Starten der Anwendung eine *.txt Datei ausführen lassen.
Klar, dazu benötigt man den StreamReader (das weis ich schon, bin ansonsten noch Anfänger)
Ich hab dazu auch schon meinen Code geschrieben:

C#-Quelltext
1:
2:
3:
4:
5:
6:
string Path = Application.StartupPath + ("appPath1.txt");
            
StreamReader sr = new StreamReader(Path);
String AppPath = sr.ReadToEnd().ToString();

richTextBox1.Text = AppPath;


Stimmt das soweit? Er soll die Datei auslesen und den Inhalt in eine richTextBox einfügen!
Fehler habe ich jedenfalls keine, allerding Funktioniert es leider auch nicht wenn ichs auf einen Button lege.
Das ist Problem Nummer 1, das andere lautet so:

Wie lege ich fest, dass er beim Start der Anwendung jedes mal die Datei durchließt und es in die richTextBox einfügt?

Wäre über so eine schnelle Hilfe wie beim anderen Thread sehr sehr erfreut :)
Danke schonmal!


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am So 11.03.2007 um 18:45


JüTho - So 11.03.07 11:26

Hallo,

benutze doch zum Einlesen:

C#-Quelltext
1:
richTextBox1.LoadFile(Path, RichTextBoxStreamType.PlainText);                    

Dann kannst Du auch steuern, ob es sich um reinen oder um formatierten Text handelt. Ich könnte mir vorstellen, dass Dein Problem damit zusammenhängt (denn auf den ersten Blick sieht der Code zwar umständlich, aber sauber aus).

Zitat:
Wie lege ich fest, dass er beim Start der Anwendung jedes mal die Datei durchließt und es in die richTextBox einfügt?

Aktiviere den dazu erforderlichen Code in MainFormLoad().

Gruß Jürgen


DenniZ - So 11.03.07 19:34

Ok, danke schonmal für den Einlese-Code, den werde ich jetzt benutzen.

Die Frage ist nur, wie wende ich das MainFormLoad() an? Die Form heißt bei mir (immernoch) Form1, also das Fenster, muss ich dann dort einfach Form1Load schreiben? Sprich so:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
namespace Game_Add_Loader
{
    public partial class Form1 : Form
    {
        public void Form1Load()
        {
            InitializeComponent();

            string Path = Application.StartupPath + ("appPath1.txt");
            richTextBox1.LoadFile(Path, RichTextBoxStreamType.PlainText);

        }


Wie man sieht ist das auch der unmittelbare Anfang des Codes ;) Wäre über eine schnelle Antwort erfreut, bin grad ein bisschen überfordert, auch rumprobieren hat nichts gebracht :(


Christian S. - So 11.03.07 19:45

Hallo!

Du legst im Designer einfache in entsprechendes Ereignis an. Dazu die Form markieren und Dir die Eigenschaften anzeigen lassen. Dann oben auf den Blitz klicken, um die Ereignisse anzeigen zu lassen (siehe Screenshot). Dort das Ereignis "Load" suchen und in das leere Feld rechts daneben doppelt klicken. Schon wird eine Methode für das Ereignis angelegt und auch dem Ereignis zugewiesen.

Funktioniert bei allem Komponten so, nur haben die halt andere Ereignisse :)

Grüße
Christian

//edit: Demnächst bitte unbedingt für zwei Fragen auch zwei Threads erstellen. Der hier lässt sich leider nur schwer trennen, daher lass ich ihn ausnahmsweise mal so.


DenniZ - So 11.03.07 20:22

Zitat:
//edit: Demnächst bitte unbedingt für zwei Fragen auch zwei Threads erstellen. Der hier lässt sich leider nur schwer trennen, daher lass ich ihn ausnahmsweise mal so.

Jap, aber es dreht sich trotzdem noch um meine Frage am Anfang, wie ich das einfüge, deswegen poste ich hier mal weiter :)

Also, wie ihr das beschrieben habt, klappt das einwandfrei! Er liest jetzt am Anfang die Datei, doch leider kommt doch ein Fehler:

"The process cannot access the file 'F:\ ... \bin\Debug\appPath1.txt' because it is being used by another process."

Das kommt dort, wo die Aufgabe des schreibens in die Datei steht, also bei mir bei richTextBox1_TextChanged!
Der Code dort lautet so:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
            StreamWriter sw = new StreamWriter(Application.StartupPath + @"\appPath1.txt");
            {
                sw.Write(richTextBox1.Text);
                sw.Flush();
                sw.Close();
            }
        }


Ich habe nun versucht, meinen alten Code oben zu benutzen, beim Auslesen, dass er dort den StreamReader benutzt "und diesen auch wieder schließt!" so dachte ich mir, dass das wichtig ist.

Hat jemand eine Idee wie ich das umgehen kann? Evtl ein "wenn die Datei benutzt wird --> überspringen"? so eine art if und break?


Christian S. - So 11.03.07 20:55

Nee, Du, jetzt mach ich aber mal zu :lol:

Probleme beim Zugriff auf eine Datei haben nun wirklich nix mehr damit zu tun, etwas beim Start der Anwendung auszuführen. Erstell' dazu mal einen neuen Thread in der richtigen Sparte ;-)