从另一个类C#访问表单的控件

时间:2012-05-14 02:16:25

标签: c#

我是c#和visual studio的新手,但不是一般的编程。 我在3天内搜索了我的问题的答案,我发现了很多,但是出于一些奇怪的原因(我确定我错过了一些非常明显的东西)我无法让它发挥作用。 我认为这是像我这样的新手问题。 我有一个表单(Form3),带有一个文本框和一个按钮(我设置它只是为了测试目的)。 我想从另一个类填充和阅读此文本框。我知道最合适的方法是使用GET和SET访问器在Form3.cs中创建一个属性。我做到了但我无法让它发挥作用。我没有收到任何错误消息,但我也无法设置文本框的值。它只是空白。 这是我的示例代码:

namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {
        public string setCodes
        {
            get { return test1.Text; }
            set { test1.Text = value; }
        }

        public Form3()
        {
            InitializeComponent();
        }

        private void Form3_Load(object sender, EventArgs e)
        {   }

        private void button1_Click(object sender, EventArgs e)
        {
            a.b();
        }
    }

    public class a
    {       
        public static void b()
        {
            Form3 v = new Form3();
            v.setCodes = "abc123";
        }
    }
}

有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:5)

问题是您要将值设置为表单的新实例。尝试这样的事情:

public partial class Form3 : Form {
    public string setCodes
    {
        get { return test1.Text; }
        set { test1.Text = value; }
    }

    private A a;

    public Form3()
    {
        InitializeComponent();
        a = new A(this);
    } 

    private void button1_Click(object sender, EventArgs e)
    {            
        a.b();            
    }


    private void Form3_Load(object sender, EventArgs e)
    {

    }
}

public class A
{       
    private Form3 v;

    public a(Form3 v)
    {
        this.v = v;
    }

    public void b()
    {
        v.setCodes = "abc123";
    }
}    

答案 1 :(得分:2)

您正在创建品牌new Form3()实例 这不会影响现有表格。

您需要将表单作为参数传递给方法。

答案 2 :(得分:2)

试试这个:

public partial class Form3 : Form
{
    /* Code from question unchanged until `button1_Click` */

    private void button1_Click(object sender, EventArgs e)
    {
        a.b(this);
    }
}

public class a
{       
    public static void b(Form3 form3)
    {
        form3.setCodes = "abc123";
    }
}

这会将表单的当前实例传递给另一个类,以便它可以更新setCodes属性。以前您正在创建一个新的表单实例,而不是更新当前的表单。

答案 3 :(得分:-2)

将表单实例发送到其他其他类

Form1 objForm1=new Form1();
obj.Validate(objForm1);

通过在表单(Designer.cs)中将控件Private修改为Public来轻松访问其他类中的控件