更新其他类的文本框
本文关键字:文本 其他 更新 | 更新日期: 2023-09-27 18:29:41
我对C#比较陌生,有点拘泥。
我在表单上有一个Rich Textbox,我想将它从不同的类更新到表单本身。
我第一次尝试
Form1.outputTextbox.AppendText(string);
但文本框无法访问,这是有道理的。所以我试着做了一个函数。在Form1上,我创建了功能
public void updateTextBox(string new_text)
{
outputTextBox.AppendText(new_text);
}
在我用过的课上。
Form1.updateTextBox("apple");
我遇到的问题是,我的类查看函数的唯一方法是将其设为静态函数,但当我这样做时,会出现错误"非静态字段、方法或属性'member'需要对象引用"
我是接近还是完全错了?任何帮助都会得到通知。
或者,您可以执行以下操作。这利用了自定义参数和事件。
namespace WindowsFormsApplication3
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
public partial class Form1 : Form
{
TextBox textBox;
SomeClass someClass;
public Form1()
{
InitializeComponent();
Initialize();
BindComponents();
}
private void BindComponents()
{
//EventHandlers
this.Load += new EventHandler(Form1_Load);
this.someClass.TextUpdatedEvent += new EventHandler(someClass_TextUpdatedEvent);
}
void someClass_TextUpdatedEvent(object sender, EventArgs e)
{
this.textBox.Text = (e as FormArgs).Text;
}
private void Initialize()
{
this.textBox = new TextBox();
this.someClass = new SomeClass();
}
void Form1_Load(object sender, EventArgs e)
{
this.Controls.Add(textBox);
}
}
public class SomeClass
{
public event EventHandler TextUpdatedEvent = delegate { };
public void UpdateText(string text)
{
if (TextUpdatedEvent != null)
{
TextUpdatedEvent(this, new FormArgs() { Text = text });
}
}
}
public class FormArgs : EventArgs
{
public string Text { get; set; }
}
}
如果你这样做,你可以像这样更新表单文本:
someClass.UpdateText("changing the text on the form");
您试图从类而不是对象访问函数。使用
Form1 myForm = new Form1();
...
myForm.updateTextBox("whatever");
还要注意这里的线程问题。是什么触发了外部代码?这是另一个ui操作吗,那么一切都很好。它来自另一个线程吗,那么你就必须处理这个了。
通过构造函数或属性将Form1实例传递给其他类。然后您可以从另一个类访问outputTextbox。
public class OtherClass
{
private Form1 form1;
public OtherClass(Form1 form1)
{
this.form1 = form1;
}
private void ChangeText()
{
form1.outputTextBox.AppendText("hello world");
}
}
从Form1.cs实例化OtherClass并传递其实例。在Form1.cs:中
OtherClass obj = new OtherClass(this);
我知道已经很晚了,但也许有人需要解决方案。。。您可以从另一个窗体访问所有控制器,而无需通过将其作为参数传递给构造函数来创建对象。。。
例如
public partial class Form2 : Form
{
MainForm mainForm;
public Form2(MainForm mainForm)
{
InitializeComponent();
this.mainForm = mainForm;
txtRecive00.TextChanged += new EventHandler(txtRecive8changed);
}
void txtRecive8changed(object sender, EventArgs e)
{
mainForm.txtRecive1.Text += txtRecive00.Text;
}
在我的情况下,我可以从Form2…更新mainForm.txtRecive1.Text
中的文本
在MineForm中,我们从Form2创建这样的对象:
Form2 f2 = new FormMeasure(this);
了解更多信息显示此短视频https://www.youtube.com/watch?v=CdH8z_JNi_U