我在其中一种用户窗体上生成了异常的按钮。这些按钮是基于xml文件中的节点生成的。
namespace e2e_template
{
public partial class Form3 : Form
{
public Form3(string data)
{
string Username = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
string Result = Username.Length <= 4 ? "" : Username.Substring(4);
string Path = $"C:\\Users\\{Result}\\Documents\\template\\config.xml";
//MessageBox.Show(Path);
XmlDocument doc = new XmlDocument();
doc.Load(Path);
XmlNodeList templates = doc.SelectNodes("//template");
int x = 10;
int y = 10;
foreach (XmlNode template in templates)
{
string name = template.SelectSingleNode("name").InnerText.Trim();
Button button = new Button
{
Text = name,
Width = 250,
Height = 75,
Left = x + 20,
Top = y,
};
button.Click += new EventHandler(Button_Click);
Controls.Add(button);
y += button.Height + 5;
}
InitializeComponent();
}
private void Button_Click(object sender, EventArgs e)
{
Form4 form = new Form4();
form.ShowDialog();
}
}
}
当我单击一个按钮并打开一个新的用户窗体(在本例中为form4)时,我希望在其他节点之间显示文本。但是XML文件中很少有“模板”节点。 XML文件如下所示:
<template id="Some Template ID">
<name>Template name</name>
<description>Discription of this template</description>
<item id="1">1st item of this template</item>
<item id="2">2nd item of this template</item>
<item id="3">3rd item of this template</item>
<item id="4">4th item of this template</item>
</template>
因此,如果我单击带有标题的按钮,例如“模板名称”,它将像现在一样打开用户form4,但是我会看到项目ID在另一个下面列出了1。但棘手的部分是ID的数量不同。我的意思是可以有4个,也可以有10个。我应该如何解决这个问题?
答案 0 :(得分:1)
首先, 创建一个课程,
public class Item
{
public string Id { get; set; }
public string Name { get; set; }
}
在您的Form4中创建一个公共属性,例如
public string Description { get; set; }
public List<Item> Items { get; set; }
然后按如下所示修改您的代码,以获取特定模板到Form4的详细信息
private void Button_Click(object sender, EventArgs e)
{
XDocument xDoc = XDocument.Load(@"Path to your xml file");
string buttonText = (sender as Button).Text;
string description = xDoc.Descendants("template").Where(x => x.Element("name").Value == buttonText).Select(x => x.Element("description").Value).FirstOrDefault();
var listofItems = xDoc.Descendants("template").Where(x => x.Element("name").Value == buttonText).SelectMany(x => x.Elements("item")).Select(y => new Item { Id = y.Attribute("id").Value, Name = y.Value });
Form4 form = new Form4();
form.Description = description;
form.Items = listofItems.ToList();
form.ShowDialog();
}
现在,“描述”和“项目”在Form4上具有值,然后您就可以使用它了。