我有一个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方法,但无法使其正常工作。我不确定应该去哪里。
感谢您的时间,
答案 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; } }
(与密码相同,请记住我,等等...)