如何在不出现分隔符的情况下将多个值放入组合框中?
how do I put multiple values into a combo box without the separating character appearing?
我正在尝试将数据添加到组合框,我正在添加一个 ID 和一个名称,两者都出现在同一行上。我正在使用 ~ 来分隔名称和 ID。但是我无法弄清楚如何在不添加 ~
的情况下将这些值放入组合框中
try
{
StreamReader sr = new StreamReader("nameForSkiTimes.txt");
string line = sr.ReadLine();
while (line != null)
{
addSkiTimesPupilCB.Items.Add(line);
line = sr.ReadLine();
}
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex.Message);
}
我真的不知道如何用c#做很多事情,请帮忙。
由于您的数据用“~”分隔,分隔它们的最简单方法是使用 Split 方法。拆分 return 带有元素的字符串数组(在您的例子中,ID 和名称)
try
{
StreamReader sr = new StreamReader("nameForSkiTimes.txt");
string line = sr.ReadLine();
string[] data;
string label;
while (line != null)
{
data = line.Split("~"); // split on "~" char
if (data.Length > 1) // check if we have at least two elements
{
label = $"{data[0]} {data[1]}"; // Access your ID and your name with index, format as you wish
addSkiTimesPupilCB.Items.Add(label);
}
line = sr.ReadLine();
}
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex.Message);
}
如果你喜欢简短的:
在函数中,您只需将这个特殊字符替换为空即可。
try
{
StreamReader sr = new StreamReader("nameForSkiTimes.txt");
string line = sr.ReadLine();
while (line != null)
{
addSkiTimesPupilCB.Items.Add(line.Replace("~", ""));
line = sr.ReadLine();
}
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex.Message);
}
除非这是学习使用文件和流,否则更好的解决方案是使用 json 文件并使用 Newtonsoft.Json 或 System.Text.Json.
反序列化
示例 json,在本例中名为 People.json,与应用程序位于同一文件夹中。
[
{
"Identifier": 1,
"Name": "Alfreds Futterkiste"
},
{
"Identifier": 2,
"Name": "Die Wandernde Kuh"
},
{
"Identifier": 3,
"Name": "Chop-suey Chinese"
},
{
"Identifier": 4,
"Name": "Antonio Moreno Taquería"
},
{
"Identifier": 5,
"Name": "Antonio Moreno Taquerí"
}
]
Class 对于 json
public class Person
{
public int Identifier { get; set; }
public string Name { get; set; }
public override string ToString() => Name;
}
使用 Newtonsoft.Json 将 json 反序列化为 Person 列表并分配 ComboBox。用于获取 ComboBox 中当前选定的 Person 的按钮。
public partial class JsonToComboBoxForm : Form
{
public JsonToComboBoxForm()
{
InitializeComponent();
Shown += OnShown;
}
private void OnShown(object sender, EventArgs e)
{
var fileName =
Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
"People.json");
var json = File.ReadAllText(fileName);
PeopleComboBox.DataSource =
JsonConvert.DeserializeObject<List<Person>>(json);
}
private void CurrentButton_Click(object sender, EventArgs e)
{
Person current = (Person)PeopleComboBox.SelectedItem;
MessageBox.Show($@"{current.Identifier, -5}{current.Name}");
}
}
或者同时显示标识符和名称
public class Person
{
public int Identifier { get; set; }
public string Name { get; set; }
public override string ToString() => $"{Identifier} - {Name}";
}
我正在尝试将数据添加到组合框,我正在添加一个 ID 和一个名称,两者都出现在同一行上。我正在使用 ~ 来分隔名称和 ID。但是我无法弄清楚如何在不添加 ~
的情况下将这些值放入组合框中try
{
StreamReader sr = new StreamReader("nameForSkiTimes.txt");
string line = sr.ReadLine();
while (line != null)
{
addSkiTimesPupilCB.Items.Add(line);
line = sr.ReadLine();
}
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex.Message);
}
我真的不知道如何用c#做很多事情,请帮忙。
由于您的数据用“~”分隔,分隔它们的最简单方法是使用 Split 方法。拆分 return 带有元素的字符串数组(在您的例子中,ID 和名称)
try
{
StreamReader sr = new StreamReader("nameForSkiTimes.txt");
string line = sr.ReadLine();
string[] data;
string label;
while (line != null)
{
data = line.Split("~"); // split on "~" char
if (data.Length > 1) // check if we have at least two elements
{
label = $"{data[0]} {data[1]}"; // Access your ID and your name with index, format as you wish
addSkiTimesPupilCB.Items.Add(label);
}
line = sr.ReadLine();
}
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex.Message);
}
如果你喜欢简短的:
在函数中,您只需将这个特殊字符替换为空即可。
try
{
StreamReader sr = new StreamReader("nameForSkiTimes.txt");
string line = sr.ReadLine();
while (line != null)
{
addSkiTimesPupilCB.Items.Add(line.Replace("~", ""));
line = sr.ReadLine();
}
}
catch (Exception ex)
{
MessageBox.Show("Error" + ex.Message);
}
除非这是学习使用文件和流,否则更好的解决方案是使用 json 文件并使用 Newtonsoft.Json 或 System.Text.Json.
反序列化示例 json,在本例中名为 People.json,与应用程序位于同一文件夹中。
[
{
"Identifier": 1,
"Name": "Alfreds Futterkiste"
},
{
"Identifier": 2,
"Name": "Die Wandernde Kuh"
},
{
"Identifier": 3,
"Name": "Chop-suey Chinese"
},
{
"Identifier": 4,
"Name": "Antonio Moreno Taquería"
},
{
"Identifier": 5,
"Name": "Antonio Moreno Taquerí"
}
]
Class 对于 json
public class Person
{
public int Identifier { get; set; }
public string Name { get; set; }
public override string ToString() => Name;
}
使用 Newtonsoft.Json 将 json 反序列化为 Person 列表并分配 ComboBox。用于获取 ComboBox 中当前选定的 Person 的按钮。
public partial class JsonToComboBoxForm : Form
{
public JsonToComboBoxForm()
{
InitializeComponent();
Shown += OnShown;
}
private void OnShown(object sender, EventArgs e)
{
var fileName =
Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
"People.json");
var json = File.ReadAllText(fileName);
PeopleComboBox.DataSource =
JsonConvert.DeserializeObject<List<Person>>(json);
}
private void CurrentButton_Click(object sender, EventArgs e)
{
Person current = (Person)PeopleComboBox.SelectedItem;
MessageBox.Show($@"{current.Identifier, -5}{current.Name}");
}
}
或者同时显示标识符和名称
public class Person
{
public int Identifier { get; set; }
public string Name { get; set; }
public override string ToString() => $"{Identifier} - {Name}";
}