0

我有一个应用程序,用户登录到一个文本框列表,用户可以在其中写入数据,然后关闭应用程序,当他们打开它时,数据仍在文本框中。

我一直在研究 .txt 和 .xml 以了解哪种格式最适合使用。我还研究了 XML 序列化以及 .xml 文件中包含哪些代码,但我有点迷失了,是否必须更改文本框的名称才能将数据加载到正确的框中?页面本身大约有 15 个文本框。

我添加了使用 System.Xml.Serialization;到我的表格。同样,当用户登录时,它会打开一个现有的表单,而当用户注销时,它只会关闭表单。

我对如何加载显示所有数据的页面、保存数据(我为文本框页面创建了一个保存按钮)以及读取文件是否读取和加载不同?

我正在使用 Visual Studio 2012 Winforms c#

4

3 回答 3

4

您可以使用 XML 的属性并从用户登录名中对其进行命名。

static public void CreateFile(string username)
{
    XmlWriter xmlW = XmlWriter.Create(username + ".xml");
    xmlW.WriteStartDocument();
    xmlW.WriteStartElement("Listofboxs");

//add the box following this canvas
    xmlW.WriteStartElement("box");
    xmlW.WriteAttributeString("nameofbox", "exampleName");
    xmlW.WriteAttributeString("valueofbox", "exampleValue");
    xmlW.WriteEndElement();
   //
    xmlW.WriteEndElement();
    xmlW.WriteEndDocument();
    xmlW.Close();
}

这将允许您使用用户名创建第一个文件。其次,要在重新加载应用程序时显示这些信息,这里有一些代码:

static public Dictionary<string, string> getBoxValue(string username)
{
     Dictionary<string, string> listofbox = new Dictionary<string, string>();

    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load(@"./" + username + ".xml");
    XmlNode root = xmldoc.DocumentElement;

    foreach (XmlNode box in root)
    {
 listofbox.Add(box.Attributes[0].Value.ToString(),box.Attributes[1].Value.ToString()); 
    }
return listofbox;
}

对于每个节点,字典将添加一对字符串,框的名称及其值。你可以用它来填满你的盒子。我知道这段代码可能有点效率低下(应该使用“使用”等),但我希望它可以帮助你。

于 2013-02-25T14:36:11.453 回答
0

要读取和写入 xml 文件,您可以将数据集添加到项目中,在其中定义两列。一列用于文本框的名称,另一列用于值。在数据集上,您可以使用方法 WriteXml 和 ReadXml 进行读取和写入。

要在启动时加载 xml,您必须订阅表单的加载事件。在 Formclosing-event 中,您可以编写数据。

public Form1()
{
   this.Load += OnLoad();
   this.FormClosing += OnFormClosing();
}
private void OnLoad(object sender, EventArgs e)
{
   // Read Data from Xml with the dataset (dataset.Readxml...)
}
private void OnFormClosing(object sender, FormClosingEventArgs e)
{
   // Write the Data from the textboxes into the xml (dataset.writexml...)
}

要设置加载部分中文本框的值,您可以使用以下代码:

TextBox tb = this.Controls.Find("buttonName", true);
if(tb != null)
   // set the value for the tb
于 2013-02-25T14:55:59.727 回答
0

我无法完全理解你的问题。显示您想要的程序的编码。只需在您的页面加载时尝试清除所有文本框数据。

    private void Form1_Load(object sender, EventArgs e)
    {
        textBox1.Text = string.Empty;
    }
于 2013-02-25T14:14:08.133 回答