Autor Beitrag
PC17
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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.

ausblenden 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); //dient nur zur Veranschaulichung, könnte auch einen Breakpoint setzen, Wert wird erfolgreich ausgegeben
                tbChatverlauf.Text += value; //erscheint nicht in der textbox
            }
        }

MfG
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4809
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: Sa 08.10.11 11:12 
user profile iconC# hat folgendes geschrieben Zum zitierten Posting springen:
Befindet sich deine tbChatverlauf TextBox in der selben Form wie deine Methode?


Ja, sonst würde auch eine Fehlermeldung kommen.
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
//Form1
public static Form2 form2 = new Form2();
form2.Show();

//Form3
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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.

ausblenden C#-Quelltext
1:
2:
3:
4:
 Form3 f3 = new Form3(this);
            f3.Show();              
            f3.TextBoxForm3 = chattext;
            //Application.Run(new Form3(this));


Weiß jemand wie ich das Form3 angezeigt bekomme + die Var in der TB?
PC17 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
f3.Show(); 
Application.Run(new Form3(this));
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4809
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37



BeitragVerfasst: 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!