Autor Beitrag
3marci
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 61
Erhaltene Danke: 5

Windows 7 / Kubuntu 11.04
C# / vb.net / php / progress (VS 2010 Express / SharpDevelop / NetBeans / proAlpha)
BeitragVerfasst: Mi 17.11.10 02:04 
Hi Leute,

Ich möchte einen kleinen Texteditor als Übung erstellen und habe folgendes Problem...
Ich habe in einem C# Projekt eine Windows Form Namens "Editor.cs" und ein Klassen-Element Namens "HandleFiles.cs".
Jetzt möchte ich dass die Klasse "HandleFiles" einen Text (z.B. Hallo Welt) in einen RichTextBox Control schreibt das sich auf dem Editor.cs befindet.
Bisher sieht das in der HandleFiles.cs Datei folgendermasen aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
class HandleFiles
  {
  private void WriteText()
          {
              Editor Form1 = new Editor();
              Form1.RichTextBox1.Text = "Hallo Welt!";
          }
  }

Wenn ich auf den Button drücke der im Editor.cs Element liegt und auf diese Funktion in der HandleFiles Klasse zugreifen soll passiert gar nichts. Die RichTextBox1 bleibt leer.

Ich habe sonst immer mit Visual Basic programmiert und da konnte man aus jeder Klasse auf den Text mit Editor.RichTextBox1.Text zugreifen wenn man den Editor vorher mit import importiert hat. Das gibts leider nicht bei C# und mit using komm ich auch nicht weiter.

Wenn ich versuche das ganze direkt zu machen 'Editor.RichtTextBox1.Text = "Hallo Welt!";' kommt eine Fehlermeldung: "Für das nicht statische Feld, die Methode oder die Eigenschaft "Projekt1.Editor.RichTextBox1" ist ein Objektverweis erforderlich."

Leider verstehe ich nicht was er da will, denn wie gesagt, bei VB habe ich das nie gebraucht.
Ich habe auch schon andere Lösungswege ausprobiert die ich im Internet gefunden habe aber irgendwie hat keiner funktioniert, jetzt hoffe ich dass ihr mir direkt helfen könnt.

Vielen Dank schon mal im Vorraus!
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 17.11.10 08:12 
Hallo,

ausblenden C#-Quelltext
1:
2:
Editor Form1 = new Editor();
Form1.RichTextBox1.Text = "Hallo Welt!";
Ja, das Problem ist, dass Du an der Stelle hier eine neue Form erzeugst und dort den Text der RichTextBox setzt. Aber nicht in Deiner eigentlichen Form. Und das siehst Du nicht, da die neu erzeugte Form auch nicht angezeigt wird.
Und wenn Du die RTB über "Editor.RichtTextBox1" ansprechen willst, so müsste sie static sein. Ist sie aber nicht.

Also ich nehme mal an, dass Du in der Form eine Instanz der Klasse HandleFiles erzeugst (hört sich eher nach einer Prozedur an, sollte vielleicht besser FileHandler heißen, aber egal).

Wenn Du nun also von dort auf Elemente der Form zugreifen willst, müsstest Du der Instanz von HandleFiles den Verweis auf die Form mitgeben (praktischerweise im Konstruktor). Und der Zugriffsmodifizierer der RichTextBox müsste dann auch auf public oder zumindest auf internal geändert werden.

ABER:
Viel besser wäre die Verwendung eines Events. Du könntest in der Klasse HandleFiles ein eigenes Event implementieren, dass immer dann gefeuert wird, wenn sich der Inhalt der RichTextBox ändern soll. In der Form musst Du dann das Event abonnieren und dann halt entsprechend verfahren.

LG, Marko

Für diesen Beitrag haben gedankt: 3marci
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 17.11.10 12:21