首页 > 解决方案 > 如何从另一个表单刷新文本框?C#

问题描述

我正在尝试使用以下代码从另一个表单更新文本框:

private void Button2_Click(object sender, EventArgs e)
{
    Variables.revenu += Variables.LAIR * 30;
    Cartel_Form.Textbox_Revenu.Text = Variables.revenu.ToString();
}

但我得到这个错误:

非静态字段、方法或属性“Cartel.Form.Textbox_Revenu”需要对象引用

这是第一种形式的文本框的内容:

Textbox_Revenu.Text = Variables.revenu.ToString();

在同一种形式中,我可以刷新/修改文本框,但不能以另一种形式。文本框修饰符设置为公共。

标签: c#formswinformstextbox

解决方案


这是一个使用事件的示例,其中子窗体包含事件,而主窗体侦听这些事件。两种形式都有一个 TextBox 和一个 NumericUpDown 控件。或者正如@jimi 提到的使用绑定。

主要形式

using System;
using System.Windows.Forms;

namespace PassingDataBetweenFormsSimple
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void ShowChildButton_Click(object sender, EventArgs e)
        {
            ChildForm childForm = new ChildForm();
            
            childForm.PassingData   += ChildFormOnPassingData;
            childForm.PassingNumber += ChildFormOnPassingNumber;

            try
            {
                childForm.ShowDialog();
            }
            finally
            {
                childForm.Dispose();
            }
            
        }

        private void ChildFormOnPassingNumber(int value)
        {
            numericUpDown1.Value = numericUpDown1.Value + value;
        }

        private void ChildFormOnPassingData(string text)
        {
            FirstNameTextBox.Text = string.IsNullOrWhiteSpace(text) ? 
                "(empty)" : 
                text;
        }
    }
}

子窗体

using System;
using System.Windows.Forms;

namespace PassingDataBetweenFormsSimple
{
    public partial class ChildForm : Form
    {
        public delegate void OnPassingText(string text);
        public event OnPassingText PassingData;

        public delegate void OnPassingNumber(int value);
        public event OnPassingNumber PassingNumber;
        public ChildForm()
        {
            InitializeComponent();
        }

        private void PassDataButton_Click(object sender, EventArgs e)
        {
            PassingData?.Invoke(FirstNameTextBox.Text);
            PassingNumber?.Invoke((int)numericUpDown1.Value);
        }
    }
}

推荐阅读