I'm trying to change value of a text box located in
public partial class Form1 : Form
from another class. I've tried something like this
public void echo(string text)
{
this.textBox1.AppendText(text + Environment.NewLine);
}
From another class I'm calling it like
Form1 cout = new Form1();
cout.echo("Does this work?");
And I get blank output. I also tried to add the static
keyword to the echo
method, but I got the same result. I searched over Stack Overflow and didn't get any solution to work. And one thing that triggers me, if I add cout.Show()
the same form pop out with valid textBox1
content. Why is that?
Why it is not showing content right away? And how do I fix this?
Instead of
cout
try usingMessageBox.Show("Does this work?");
Now sending textbox value from one form to another.
The problem is here:
You're creating a new version of your main form,
Form1
.What is this other class, and how is it being instantiated?
You have two options:
When your code in
Form1
creates the class, give him an instance tothis
, and call yourecho
method on that reference to (the only) instance ofForm1
.Add an
event
to this other class, that is fired when he wants to provide some information. YourForm1
code will register an event handler on this event, and make the call toecho
himself, when the event fires.You're making an entirely new
Form1
. The reason one appears when you callShow()
is because you are showing the new window you've made. I'm not sure what your actual intent is, because I don't know where you're calling this from, but what you want to do is callecho
for theForm1
that has already been created.You don't need to create another object of Form1.
Try this code and I think, you will guess what is happening:
Each time you say new Form1(), you are creating a distinct and separate instance of that form. Instead, you need to create a variable in the class that you are trying to access your form. For example, let's pass it in the constructor:
Notice that you access the particular instance of Form1 in your echo method: