【问题标题】:C# : modify form control from a classC#:从类修改表单控件
【发布时间】:2012-07-01 16:48:18
【问题描述】:

我有这样的表格和班级:

namespace ALTER_Control
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ALTER A = new ALTER();
            A.ALTER();
        }
    }

    public class ALTER
    {
        public Form1 F;
        public void ALTER()
        {
            F.TextBox1.Text="I Altered That";
        }
    }
}

所以我尝试调用 ALTER() 来更改 Form1 中的 textbox1 值,但我得到了那个错误:

object reference not set to an instance of an object

只有当我访问或修改 Form1 控件时才会发生这种情况。

顺便说一下,我将 textbox1 修饰符设置为 public

所以,最后我想更改控制值而不会出现该错误。

【问题讨论】:

    标签: c# winforms class inheritance controls


    【解决方案1】:

    您需要将引用分配给表单。像这样:

        private void button1_Click(object sender, EventArgs e)
        {
                ALTER A = new ALTER();
                A.F = this;
                A.ALTER();
        }
    

    【讨论】:

    • 非常感谢,它帮助了:)
    【解决方案2】:

    使用这些代码行:

        ALTER A = new ALTER();
        A.F = this ;
        A.ALTER();
    

    【讨论】:

    • 非常感谢,它帮助了:)
    【解决方案3】:

    为什么你的ALTER 类(这也不是一个很好的类名)必须知道你的表单?

        private void button1_Click(object sender, EventArgs e)
        {
            ALTER A = new ALTER();
            this.TextBox1.Text = A.ALTER();
        }
    }
    
    [...]
    
    public class ALTER
    {
        public String ALTER()
        {
            // Do your thing
    
            return "I Altered That";
        }
    }
    

    【讨论】:

    • +1 职责分离是每个 OOP 的基本实践。 ALTER 类应该完成它的工作并将结果呈现给 UI 界面。
    • 非常感谢,它帮助了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多