从另一个类访问文本框变量

时间:2018-08-19 17:05:18

标签: c# .net class

我有一个Windows窗体(c#)。在表单中,用户输入一些文本,然后将其保存为XML。每次解决方案启动时,它都会读取XML。

起初,我只是在测试,所以我有一个大师班。然后,我开始创建不同的类并遇到问题。 我无法从其他类的表单的文本框中访问值。还有一些其他帖子要求相同,但我无法解决。

这就是我所拥有的:

namespace Emailing
{
    public partial class Form1 : Form
    {

        public Form1()
        {

        InitializeComponent();
        XmlController xc = new XmlController();
        xc.readXml(); //reads the xml when starts
        }

        private void button1_Click(object sender, EventArgs e)
        {
        XmlController xc2 = new XmlController();
        xc2.updateXml(); //updates the xmls when the users clicks a button
        }
    }
}


namespace Emailing
{
class XmlController
{   
    public void updateXml()
    {

        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        dt.TableName = "Server";
        dt.Columns.Add("Server");
        ds.Tables.Add(dt);

        DataRow row = ds.Tables["Server"].NewRow();
        row["Server"] = Form1.textBox6.Text;          
        ds.Tables["Server"].Rows.Add(row);
        ds.WriteXml("Emailer.xml");
    }

    public void readXml()
    {
        DataSet ds = new DataSet();
        ds.ReadXml("Emailer.xml");
        Form1.textBox6.Text = ds.Tables["Server"].Rows[0][0].ToString();

    }

}

}

我尝试了几项都没有成功。 据我了解,“最佳”实践是创建一个接口。我尝试过,但是无法正常工作。 我还尝试为textBox创建一个get set方法,但无法使其正常工作。我不确定应该去哪里。

感谢您的时间,

2 个答案:

答案 0 :(得分:1)

您已实例化XmlController类2次。

这意味着您有2个相同类的对象,但是它们是不同的对象。

您应该做的是一次实例化该类,并将该对象也用于button_Click事件(请参见代码)

namespace Emailing
{
    public partial class Form1 : Form
    {
    private XmlController xc;

    public Form1()
    {
        InitializeComponent();
        xc = new XmlController();
        xc.readXml(); //reads the xml when starts
    }

    private void button1_Click(object sender, EventArgs e)
    {
        xc.updateXml(); //updates the xmls when the users clicks a button
    }
}

}

但是我建议您开始尝试MVVM模式,请参见:https://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial

答案 1 :(得分:0)

如果您要从类的“外部”访问某些内容(表单是一个类), 您需要将其设为公开。

编辑:

namespace Emailing
{
  public partial class Form1 : Form
  {

    public Form1()
    {
      InitializeComponent();
      ...
    }

    public string TextOfTextBox1 { get { return Textbox1.Text; } }
  }
}

如果有的话,让我们说一个“ LoginForm”,
您可能想要添加属性以获取给定的用户名public string UserName { get { return userNameTextBox.Text; } }
(与密码相同,请记住我,等等...)