| Autor |
Beitrag |
PC17
      
Beiträge: 37
|
Verfasst: Sa 08.10.11 09:37
Hallo!
Habe ein kleines Problem mit der übergabe einer Varible vom Form1 zum Form3.
Variablen werden erfolgreich Übergeben, kann es über eine MessageBox auch ausgegeben aber der Wert wird nicht in die Textbox geschrieben.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public string TextBoxForm2 { get { return "return form3 get"; } set { MessageBox.Show(value + "Form3 value", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Question); tbChatverlauf.Text += value; } } |
MfG
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 08.10.11 10:14
Dann ist die Instanz, an die du den Wert übergibst, nicht die Instanz des Forms, die gerade angezeigt wird.
Wie rufst du denn das auf?
|
|
PC17 
      
Beiträge: 37
|
Verfasst: Sa 08.10.11 10:48
Habe es so gemacht wie es hier beschieben steht: dotnet-snippets.de/d...ei-forms-SID180.aspx
Im Form1 rufe ich es so auf: f2.TextBoxForm2 = "text";
Aber wieso wird der richtige Wert in der Messagbox ausgegeben aber nicht in der Textbox angezeigt?
Zuletzt bearbeitet von PC17 am Sa 08.10.11 11:15, insgesamt 1-mal bearbeitet
|
|
C#
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Sa 08.10.11 11:05
Befindet sich deine tbChatverlauf TextBox in der selben Form wie deine Methode?
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|
Th69
      

Beiträge: 4809
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Sa 08.10.11 11:11
Hallo PC17,
wie jaenicke schon geschrieben hat, du rufst es (wahrscheinlich) mit der falschen Instanz deiner Form2-Klasse auf. Wie hast du 'f2' denn erzeugt? Doch nicht etwa lokal mit
C#-Quelltext 1: 2:
| Form2 f2 = new Form2(); f2.TextBoxForm2 = "text"; |
??? Dann würdest du es einfach einer unsichtbaren Form2-Instanz übergeben. Du mußt eine Referenz auf die bisher angezeigte Form2-Instanz benutzen.
s.a. Der Inhalt des Labels wird nicht verändert (insbesondere auch mein dort verlinkter Artikel).
|
|
PC17 
      
Beiträge: 37
|
Verfasst: Sa 08.10.11 11:12
C# hat folgendes geschrieben : | | Befindet sich deine tbChatverlauf TextBox in der selben Form wie deine Methode? |
Ja, sonst würde auch eine Fehlermeldung kommen.
|
|
C#
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Sa 08.10.11 11:58
Ja dann kann es eigentlich nur die falsche Instanz sein. Wenn du jetzt z.B. 3 Froms hast und du startest in der 1. Form die 2. Form und willst von der 3. Form auf die 2. zugreifen, musst du die Instanz der Form2 aus Form1 verwenden und nicht eine Neue erstellen:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| public static Form2 form2 = new Form2(); form2.Show();
Form2 form2 = Form1.form2(); form2.TextBox1.Text = xyz; |
Nach diesem Muster müsste es funktionieren.
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|
PC17 
      
Beiträge: 37
|
Verfasst: Sa 08.10.11 13:59
Danke, es läuft jetzt.
Hmm, wenn ich das Form3 mit f3.show(); anzeigen lasse schließt es sich sofort wieder nachdem die Var eingetragen wurde.
Hätte es jetzt mit Application.Run(new Form3(this)); aber dann kann die Var nicht in TB geschrieben werden.
C#-Quelltext 1: 2: 3: 4:
| Form3 f3 = new Form3(this); f3.Show(); f3.TextBoxForm3 = chattext; |
Weiß jemand wie ich das Form3 angezeigt bekomme + die Var in der TB?
|
|
PC17 
      
Beiträge: 37
|
Verfasst: Sa 08.10.11 14:56
Das ganze soll ein Chat werden wo im Server ein Chatfenster(Form3) aufgeht.
Soweit so gut, nur gibt es noch 2 kleine Probleme.
1. Wenn der Client eine Nachricht schickt, wird das Chatfenster in einem neuen Thread geöffnet und das bei jeder Nachricht, das Überprüfen ob Form 3 offen ist klappt nicht.
2. Das im vorherigen Post gennante Probleme, am besten funktionier es, wenn ich beide Aufrufe stehen lasse:
C#-Quelltext 1: 2:
| f3.Show(); Application.Run(new Form3(this)); |
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 08.10.11 16:35
Du kannst an Application.Run auch dein selbst erstelltes Formular f3 übergeben. Du musst da kein neues erstellen.
|
|
Th69
      

Beiträge: 4809
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Sa 08.10.11 16:50
Trotzdem hört sich das alles nach einem groben Design-Fehler in dem Programm an...
Es sollte nur (für so ein einfaches Programm) genau ein Application.Run(...)-Aufruf in der Main-Methode für das Hauptform stehen.
PC17: vllt. solltest du ersteinmal die Grundlagen lernen, bevor du mit Threading und Socket-Connections anfängst?
|
|
PC17 
      
Beiträge: 37
|
Verfasst: Sa 08.10.11 17:12
Danke für Eure hilfe.
Ich wollte einfach einmal ein Chat-Programm für das lokal Netz machen, nebenbei lerne ich die Grundlagen 
|
|
PC17 
      
Beiträge: 37
|
Verfasst: Di 11.10.11 14:24
Das Programm funktioniert soweit ganz gut.
Ich kann beliebig oft einen Text von Form3 an Form1 übergeben der dann in einer MessageBox ausgegeben wird.
Nur bekomme ich es nicht hin, dass ich einen weiteren Text vom Form1 auf Form3 übergebe, es muss doch irgenwie gehen, dass man Thread übergreifend arbeitet?
Wäre toll, wenn mir jemand helfen kann, Programm findet Ihr im Anhang
PS: Der neue Thread hat in diesem Bsp nicht viel Sinn, es ist auch nur ein Programmausschnitt, der später parallel zu anderen Funktionen laufen soll.
Besten Dank
MfG PC17
Einloggen, um Attachments anzusehen!
|
|