更新其他类的文本框

本文关键字:文本 其他 更新 | 更新日期: 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