當我從另一個實例調用方法idload()
時,它不會更新它應該的列表視圖列表。我知道該方法正在調用正確,因爲我在idload()
中的每個語句後都放了一個MessageBox
,並且顯示了它。如果idload()
被稱爲Form2.cs
[它的形式]它工作正常,但如果我從Form4.cs
調用它,它不會更新列表視圖。從另一個實例調用方法時,listview不會更新
我使用MessageBox.Show(xmlReader.GetAttribute("id"));
,當idload()
從Form2.cs
被調用時,它循環遍歷xml中的每個id一次並按預期更新列表視圖。當它從Form4.cs
被調用時,它遍歷所有內容兩次,不更新列表視圖。
這裏是代碼的相關部分:
Form4.cs
public void myMethod()
{
Form2 form2 = new Form2();
form2.idload();
}
public void idwrite()
{
XElement xml = XElement.Load("settings.xml");
xml.Add(new XElement("Chat",
new XAttribute("id", textBox1.Text),
new XAttribute("name", textBox2.Text)));
xml.Save("settings.xml");
myMethod();
this.Close();
}
Form2.cs
public void idload()
{
listView1.Items.Clear();
XmlReader xmlReader = XmlReader.Create("settings.xml");
while (xmlReader.Read())
{
if ((xmlReader.NodeType == XmlNodeType.Element) && (xmlReader.Name == "Chat"))
{
if (xmlReader.HasAttributes)
{
// listView1.Items.Add(xmlReader.GetAttribute("id"));
// listView1.Items.Add(xmlReader.GetAttribute("name"));
string[] arr = new string[4];
ListViewItem itm;
arr[0] = (xmlReader.GetAttribute("id"));
arr[1] = (xmlReader.GetAttribute("name"));
itm = new ListViewItem(arr);
MessageBox.Show(xmlReader.GetAttribute("id"));
listView1.Items.Add(itm);
}
}
}
xmlReader.Close();
}
這裏是項目如果需要的話:https://ufile.io/8dc20
真的很困惑,爲什麼會出現這種情況,因爲在調試時沒有錯誤,所以任何幫助都不勝感激。
謝謝。
通常的誤解。在你的代碼中你創建了一個Form2的NEW實例,你正在調用那個實例上的方法,而不是已經顯示的實例。嘗試在調用idload之後調用form2.Show,然後您會看到您在不同實例上的更改 – Steve
@Steve哦謝謝我沒有意識到這一點。有沒有辦法在初始表單上進行更改,而不是第二個表單上的更改? – Venomz