我有一个名为“Form1.cs”的表单,它调用一个我们称之为“Class1.cs”的类,以及另一个名为“Form2.cs”的表单。如果窗体处于打开状态,Class1 中的子例程需要更新 Form2 中的文本框。文本需要在附加到文本框中的当前文本后出现,以便实时更新。我不知道如何进行这项工作。我尝试了很多东西,他们没有给我错误,但他们也没有将文本写入文本框。
这里的每个请求是我当前的代码。请记住,这是一个测试项目,用于在将其实施到真正的项目之前弄清楚这一点。
Form1.cs 中的代码
namespace Test
{
public partial class Form1 : Form
{
Form2 cs_form2 = new Form2();
Class1 cs_class1 = new Class1();
public Form1()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
cs_class1.Writelog();
}
private void Form1_Load(object sender, EventArgs e)
{
cs_form2.Show();
}
public void writeToTextbox()
{
i = 0;
while(i<=10)
{
cs_form2.testTextBox.AppendText("still works");
i++;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Form2.cs 中的代码
namespace Test
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void clear_Click(object sender, EventArgs e)
{
testTextBox.Text = "";
}
public void AppendText()
{
testTextBox.AppendText("asklvhslieh");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Class1 中的代码
namespace Test
{
class Class1
{
Form2 cs_form2 = new Form2();
public void Writelog()
{
cs_form2.testTextBox.AppendText("asg");
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:通过编写new Form2(),您的代码Class1正在创建Form2.
此实例与在Form1(也是通过写入new Form2())中创建的另一个实例没有任何关系,后者实际上是可见的。
您需要提供Class1的现有实例Form2,也许使用静态属性(如下所述)。
要将文本附加到文本框,您应该调用该AppendText方法。
要做到这一点之外Form2,您应该public在Form2该调用上创建一个方法AppendText。
例如:
partial class Form2 : Form {
...
public void AppendMyText(string text) {
myTextbox.AppendText(text);
}
...
}
Run Code Online (Sandbox Code Playgroud)
要在 中调用此方法Class1,您需要对Form2对象的引用。
如果您一次只有一个Form2,您可以创建一个静态属性,如下所示:
partial class Form2 : Form {
static Form2 instance;
public static Form2 Instance { get { return instance; } }
protected override void OnShown(EventArgs e) {
base.OnShown(e);
instance = this;
}
protected override void OnClosed(EventArgs e) {
base.OnClosed(e);
instance = null;
}
Run Code Online (Sandbox Code Playgroud)
在Class1(或其他任何地方),然后您可以编写
if (Form2.Instance != null)
Form2.Instance.AppendMyText(someString);
Run Code Online (Sandbox Code Playgroud)
请注意,您需要在 UI 线程上执行此操作;如果您在后台线程上运行,则可以调用BeginInvoke.
| 归档时间: |
|
| 查看次数: |
9256 次 |
| 最近记录: |