如何在不出现分隔符的情况下将多个值放入组合框中?

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}";
}