【问题标题】:CS0120 An object reference is required for the non-static field, method, or property 'Form1.rtBox'CS0120 非静态字段、方法或属性“Form1.rtBox”需要对象引用
【发布时间】:2021-11-20 20:43:25
【问题描述】:

主类 WriteIt(string text) 中有一个方法与 GUI 中的 RichTextBox rtBox 通信。

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }
        public static void WriteIt(string text)
        {
            rtBox.Text = text + "/n" + rtBox.Text;
        }
    }

我想像这样从其他类调用这个方法:

class Register
{
        public int balance = 0;
        public static void ListIt()
        {
            Form1.WriteIt("Money: " + balance);
        }
}

它给了我一个错误:

CS0120:非静态字段需要对象引用, 方法或属性“Form1.rtBox”

由于程序的性质,我无法使 ListIt() 成为非静态方法。我尝试了一些我在这里看到的类似解决方案,但它们对我不起作用。我该怎么办?

【问题讨论】:

  • “由于程序的性质,我无法使 ListIt() 成为非静态方法。”那么,如果有多个 Form1 实例,您期望会发生什么?您希望哪一个最终会更改文本框?从根本上说,something 需要引用 Form1 的实例才能更改 特定表单 上的文本。
  • 需要在ListIt方法中使用Form1的对象

标签: c# winforms


【解决方案1】:

看起来您正在从静态方法调用非静态成员(属性或方法,或者更具体地说是 Form1.rtBox)。您有两种选择:

  1. 将被调用的成员也设为静态:

  2. 在调用方法中创建一个 rtBox 实例

  3. 使调用方法成为非静态实例方法

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多