将字典从另一个类调用到main类,并将其值设置为combobox

本文关键字:设置 combobox main 字典 另一个 调用 | 更新日期: 2023-09-27 18:30:13

我制作了一个文本文件,其中包含一个城市名称和该城市的许多有趣的地方名称。我希望当城市名称出现在第一个组合框中时,第二个组合框将自动显示所有地名。

为了做到这一点,在第一步中,我用从一个大的.xls文件中获得的城市名称填充了第一个组合框。然后我制作了一个文本文件,里面有那个城市的城市和地名。它看起来像这个-

Flensburg;Nordertor;Naval Academy Mürwik;Flensburg Firth
Kiel;Laboe Naval Memorial;Zoological Museum of Kiel University
Lübeck;Holstentor;St. Mary's Church, Lübeck;Passat (ship)

我在一个单独的方法中创建了dictionary,现在我想以主形式调用这个方法。但它实际上并不起作用。

对于数据输入,我写了如下代码-

public class POI
{
    Dictionary<string, List<string>> poi = new Dictionary<string, List<string>>();
    public void poiPlace()
    {                            
        foreach (string line in File.ReadLines("POIList.txt"))
        {
            string[] parts = line.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            poi.Add(parts[0], new List<string>());
            poi[parts[0]] = new List<string>(parts.Skip(1));
         }
    }

现在我想以的主要形式称之为

 public partial class Form1 : Form
 {
     public Form1()
     {
         InitializeComponent();                       
         POI poi1 =new POI();
         poi1.List();                     
     }
     public void Combo_list_SelectedIndexChanged(object sender, EventArgs e)
     {
          if (Combo_list1.SelectedItem != null)
          {
              string txt = Combo_list1.SelectedItem.ToString();
              if (poi.ContainsKey(txt))
              {
                  List<string> points = poi[txt];
                  Combo_list2.Items.Clear();
                  Combo_list2.Items.AddRange(points.ToArray());
              }
          }
      }

它根本不起作用。

将字典从另一个类调用到main类,并将其值设置为combobox

您不会在任何地方调用poiPlace,这将适当地设置poi-字典。我想你必须写一些类似的东西

POI poi1 = new POI();
poi1.poiList()

代替

POI poi1 =new POI();
poi1.List();

EDIT:您还必须提供一种机制,通过使字典本身public(强烈建议不要这样做)或使用以下方法将数据从字典中获取到表单中:

POI-类中添加以下两种方法:

public bool ContainsKey(string key) { return this.poi.ContainsKey(key) ; }
public List<string> GetValue(string key) { return this.poi[key]; }

这两种方法现在可以在您的表单中使用:

if (poi1.ContainsKey(txt))
{
    List<string> points = poi1.GetValue(txt);
    Combo_list2.Items.Clear();
    Combo_list2.Items.AddRange(points.ToArray());
}