我正在使用Visual Studio WinForms开发一个“花名册”应用程序,其中花名册(人员列表)从(CSV)文本文件中读取。文本文件中每个人有11个值。(姓名,描述等)。我设置了应用程序,以便当表单加载时,此文本文件中的所有Name值都会加载到列表框中。
x1c 0d1x的数据
然后,当用户点击列表框中的人员时,表单上的标签会更新,以与所选人员的值相对应。(例如,用户点击“人员1”,“描述”标签会更改为该特定人员的描述)。
现在我想做的是当用户点击描述标签时,会显示一个输入框,用户可以输入一个新的描述。在输入框中添加新的描述之后,这个人的描述值就会在文本文件中被修改。我使用的代码没有错误,但是文本文件没有改变以更新新的“描述”。
我对C#很陌生,所以希望这是有意义的。
多谢了!
private void lblDescription_Click(object sender, EventArgs e)
{
string input = Interaction.InputBox("Enter a new description", "Enter a value", personDescription, 0, 0);
string idToFind = "Person 1";
string newDescription = input;
string line;
while ((line = roster.ReadLine()) != null)
{
string[] words = line.Split(',');
for (int i = 0; i < words.Length; i++)
{
if (words[i] == idToFind)
{
//words[i + 1] = newDescription;
words[i] = String.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}", personName,newDescription,personDrawValue, personInRingAbility, personMicSkills, personCharisma, personCondition, personAlignment, personWeight, personGender, personMorale, personRingStyle);
break;
}
File.WriteAllLines(roster2,words);
}
}
字符串
1条答案
按热度按时间6qqygrtg1#
您的帖子谈到了数据的加载和保存(Serialization)但这听起来并不像是造成麻烦的根本问题。相反,当你输入一些描述文本时,会有一个断开,当你保存时,它并没有完全连接回你实际保存的对象。如果你还没有听说过Binding这个术语,你很快就会听说了。顾名思义,它意味着UI控件(类似于文本编辑器)和作为其目标的数据被连接以相互通知。通过这种方式同步,下面的代码将在
ListBox
中连接更改以通知其他控件,而无需手动编写所有同步。的数据
你可以说你的应用程序根本不处理“文件”。它处理的是一个人的花名册,可以抽象为
BindingList<Person>
,如果它不是现成的,它将是ListBox
的DataSource
。你将一个人描述为“一组11个值”,但我们真的想确定这一点。字符串
ListBox
将管理一个Person
对象的列表,其中Name
是列表中显示的属性。至于文本文件,这里的目标是以某种方式将其转换为内存中的活生生的List
,我提到Json的原因是为了方便ListBox
现在显示了5个名字,listBox.SelectedValue
是一个Person
而不是一个字符串。型
向UI控件添加一些绑定将使列表框中的选择更改自动反映在这些控件中。
型
作为一个建议,我个人进行描述编辑的方式是通过双击将描述“标签”变成一个可编辑的控件。
的
型
当您重新加载应用程序时,更改将以您预期的方式保持不变。