Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在使用键、值对时以编程方式选择组合框中的项目_C#_Combobox - Fatal编程技术网

C# 如何在使用键、值对时以编程方式选择组合框中的项目

C# 如何在使用键、值对时以编程方式选择组合框中的项目,c#,combobox,C#,Combobox,有人能解释一下,当项目定义如下时,我如何通过编程在组合框中选择项目: class ComboboxItem { public string DisplayString; public string Key; public ComboboxItem(string key, string displayString) { Key = key; DisplayString

有人能解释一下,当项目定义如下时,我如何通过编程在组合框中选择项目:

    class ComboboxItem
    {
        public string DisplayString;
        public string Key;

        public ComboboxItem(string key, string displayString)
        {
            Key = key;
            DisplayString = displayString;
        }

        // Generates the text shown in the combo box
        public override string ToString()
        {
            return DisplayString;
        }
    }
myCombo.Items.Add(new ComboboxItem(“<key>“, “<text_to_display>”));
组合框在运行时填充以下项目:

    class ComboboxItem
    {
        public string DisplayString;
        public string Key;

        public ComboboxItem(string key, string displayString)
        {
            Key = key;
            DisplayString = displayString;
        }

        // Generates the text shown in the combo box
        public override string ToString()
        {
            return DisplayString;
        }
    }
myCombo.Items.Add(new ComboboxItem(“<key>“, “<text_to_display>”));
我需要根据键以编程方式选择一个项,但我不能使用这里提出的建议:因为在运行时填充组合框时,我不知道数据项。有人能帮忙吗?非常感谢


编辑-这是一个winforms应用程序。

尝试类似的方法

comboBox1.Items.Add(new ComboboxItem("a", "a"));
            comboBox1.Items.Add(new ComboboxItem("b", "b"));
            comboBox1.Items.Add(new ComboboxItem("c", "c"));
            comboBox1.Items.Add(new ComboboxItem("d", "d"));

            var key = "c";

            foreach (var item in comboBox1.Items)
            {
                var comboItem = (ComboboxItem) item;
                if (comboItem.Key.Equals(key))
                    comboBox1.SelectedItem = comboItem;
            }
我刚刚做了一个Winforms项目,它成功了。组合框将c显示为选定值

你也可以用linq。这可能是一种选择项目的方法

public void SelectItem(string key)
        {
            var comboItem = comboBox1.Items
                .Cast<ComboboxItem>()
                .FirstOrDefault(item => item.Key.Equals(key));
            if (comboItem == null)
            {
                //do whatever you want
            }
            else
            {
                comboBox1.SelectedItem = comboItem;
            }
        }

希望有帮助

试试这样的方法

comboBox1.Items.Add(new ComboboxItem("a", "a"));
            comboBox1.Items.Add(new ComboboxItem("b", "b"));
            comboBox1.Items.Add(new ComboboxItem("c", "c"));
            comboBox1.Items.Add(new ComboboxItem("d", "d"));

            var key = "c";

            foreach (var item in comboBox1.Items)
            {
                var comboItem = (ComboboxItem) item;
                if (comboItem.Key.Equals(key))
                    comboBox1.SelectedItem = comboItem;
            }
我刚刚做了一个Winforms项目,它成功了。组合框将c显示为选定值

你也可以用linq。这可能是一种选择项目的方法

public void SelectItem(string key)
        {
            var comboItem = comboBox1.Items
                .Cast<ComboboxItem>()
                .FirstOrDefault(item => item.Key.Equals(key));
            if (comboItem == null)
            {
                //do whatever you want
            }
            else
            {
                comboBox1.SelectedItem = comboItem;
            }
        }

希望它在查看代码时有所帮助,有一件事并不是真正的问题,那就是必须重新发明轮子。ComboboxItem类看起来很像字典,因此似乎没有必要用ComboboxItem类重新创建这个类

另一个问题是你的评论

我需要根据键以编程方式选择项目,但我不能使用此处提出的建议:设置 基于键、值对的组合框。因为我没有先见之明 在运行时填充组合框时的数据项

如果这是真的,那么你怎么可能知道选择什么呢

下面的代码使用了字典、组合框、文本框和按钮。字典将填充一些数据,然后设置为组合框的数据源。组合框中仅显示文本。在表单上,文本框用于允许用户键入一个值,以便在单击按钮时将组合框的选定值更改为。如果字典中不存在该键,则会显示一条消息,指示未找到索引

既然你说你不知道你可能在寻找什么,我很好奇你希望如何选择合适的索引。希望这有意义

Dictionary<int, string> comboBoxData = new Dictionary<int, string>(); 
public Form1() {

  InitializeComponent();
  comboBoxData = GetDataDictionary();
  comboBox1.DataSource = new BindingSource(comboBoxData, null);
  comboBox1.DisplayMember = "Value";
  comboBox1.ValueMember = "Key";
}

private void SetSelectedIndex(int indexToSelect) {
  if (comboBoxData.Keys.Contains(indexToSelect)) {
    comboBox1.SelectedIndex = indexToSelect;
  }
  else {
    MessageBox.Show("The supplied key does not exist!");
  }
}

private Dictionary<int, string> GetDataDictionary() {
  Dictionary<int, string> dictionary = new Dictionary<int, string>();
  for (int i = 0; i < 15; i++) {
    dictionary.Add(i, "Item name " + i);
  }
  return dictionary;
}

private void buttonSelectIndex_Click(object sender, EventArgs e) {
  if (tbIndexToSelect.Text != "") {
    int indexToSelect = comboBox1.SelectedIndex;
    if (int.TryParse(tbIndexToSelect.Text, out indexToSelect)) {
      SetSelectedIndex(indexToSelect);
    }
  }
}

在查看代码时,有一件事并不是真正的问题,那就是必须重新发明轮子。ComboboxItem类看起来很像字典,因此似乎没有必要用ComboboxItem类重新创建这个类

另一个问题是你的评论

我需要根据键以编程方式选择项目,但我不能使用此处提出的建议:设置 基于键、值对的组合框。因为我没有先见之明 在运行时填充组合框时的数据项

如果这是真的,那么你怎么可能知道选择什么呢

下面的代码使用了字典、组合框、文本框和按钮。字典将填充一些数据,然后设置为组合框的数据源。组合框中仅显示文本。在表单上,文本框用于允许用户键入一个值,以便在单击按钮时将组合框的选定值更改为。如果字典中不存在该键,则会显示一条消息,指示未找到索引

既然你说你不知道你可能在寻找什么,我很好奇你希望如何选择合适的索引。希望这有意义

Dictionary<int, string> comboBoxData = new Dictionary<int, string>(); 
public Form1() {

  InitializeComponent();
  comboBoxData = GetDataDictionary();
  comboBox1.DataSource = new BindingSource(comboBoxData, null);
  comboBox1.DisplayMember = "Value";
  comboBox1.ValueMember = "Key";
}

private void SetSelectedIndex(int indexToSelect) {
  if (comboBoxData.Keys.Contains(indexToSelect)) {
    comboBox1.SelectedIndex = indexToSelect;
  }
  else {
    MessageBox.Show("The supplied key does not exist!");
  }
}

private Dictionary<int, string> GetDataDictionary() {
  Dictionary<int, string> dictionary = new Dictionary<int, string>();
  for (int i = 0; i < 15; i++) {
    dictionary.Add(i, "Item name " + i);
  }
  return dictionary;
}

private void buttonSelectIndex_Click(object sender, EventArgs e) {
  if (tbIndexToSelect.Text != "") {
    int indexToSelect = comboBox1.SelectedIndex;
    if (int.TryParse(tbIndexToSelect.Text, out indexToSelect)) {
      SetSelectedIndex(indexToSelect);
    }
  }
}

我真的要问你为什么要用那门课。与仅使用字符串相比,它似乎没有带来任何好处,而且它使某些事情,例如您当前的问题变得更加复杂。这是一种什么样的应用程序?我的意思是winforms wpf或web?坦率地说,我对c还是有点陌生,我不知道更好的实现。请您提出一个更好的方法来添加具有3个字符代码和文本描述的项。当用户上传某个XML文件时,我从XML数据中提取3个字符的代码,然后我需要在组合框中预选相应的项。非常感谢。这是一个winforms应用程序,很抱歉我忘了提到这个。看一看,我不得不问你为什么要使用这个类。与仅使用字符串相比,它似乎没有带来任何好处,而且它使某些事情,例如您当前的问题变得更加复杂。这是一种什么样的应用程序?我的意思是winforms wpf或web?坦率地说,我对c还是有点陌生,我不知道更好的实现。请您提出一个更好的方法来添加具有3个字符代码和文本描述的项。当用户上传某个XML文件时,我从XML数据中提取3个字符的代码,然后我需要在组合框中预选相应的项。非常感谢。这是一个winforms应用程序,很抱歉我忘了提及。看看谢谢taquion,我现在就要去上班了,我会尽快尝试你的建议
等我到那儿。非常感谢。这工作做得很好。谢谢。谢谢塔奎恩,我马上就要去上班了,我一到那里就试试你的建议。非常感谢。这工作做得很好。谢谢。谢谢你提出的解决方案。数据作为XMLs的有效负载从入站接口馈送。当我们收到有效载荷时,我们从有效载荷中推断组合框的所有值。感谢您提出的解决方案。数据作为XMLs的有效负载从入站接口馈送。当我们收到有效载荷时,我们从有效载荷中推断组合框的所有值。