【问题标题】:Accessing textbox variables from another class从另一个类访问文本框变量
【发布时间】:2018-08-19 17:05:18
【问题描述】:

我有一个 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 方法,但无法使其工作。我不确定它应该去哪里。

感谢您的宝贵时间,

【问题讨论】:

标签: c# .net class


【解决方案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

【讨论】:

  • 谢谢!。我会尝试 MVVM 模式。
  • 稍微读一下,到时候它就会派上用场:)
【解决方案2】:

如果你想从一个类的“外部”访问某些东西(表单就是一个类), 你需要它是公开的。

编辑:

namespace Emailing
{
  public partial class Form1 : Form
  {

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

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

如果你有,让我们说一个“登录表单”,
您可能想要添加一个属性来获取给定的用户名 public string UserName { get { return userNameTextBox.Text; } }
(同样的密码,记住我,等等......)

【讨论】:

  • 我应该在哪里添加属性?在课堂里?在一个方法中(public Form1()?
  • 带示例的编辑答案...一般答案,在您的表单的部分类中
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多