【问题标题】:How to compare the selected string from a listBox to another String in c#如何将列表框中的选定字符串与c#中的另一个字符串进行比较
【发布时间】:2013-10-14 07:30:42
【问题描述】:

对于我的 windows 窗体应用程序,我尝试从 listBox 中检索选定的字符串,我希望它与设置的字符串进行比较,以便在比较返回 true 的情况下,我可以将下一个 listBox 设置为具有特定的,选择相关的值。

    namespace PhysCalc
    {
     public class Selectors
     {
    public static string[] topicContents = new string[] { "MECHANICS", "THEORY_OF_RELATIVITY" };
    public static string[] VarItemsMechanics = new string[] { "Test", "Wavelength" };

    public static void SetVarBox()
    {
        PhysCalc.Topic.DataSource = topicContents;
        if PhysCalc.Topic.Items[PhysCalc.Topic.SelectedIndex].ToString() == "MECHANICS")
        {
            PhysCalc.Var.DataSource = VarItemsMechanics;
        }
    }
}
}

但不知何故,当我在列表框中选择“MECHANICS”时(在上面名为“主题”的代码中),第二个列表框(上面名为“Var”)只是保持空白

任何帮助将不胜感激

【问题讨论】:

  • VarItemsMechanics 是什么?
  • 抱歉没有发布;它是一个数组,应该设置为“Var”列表框的数据源
  • 您确定您的VarItemsMechanics 不为空吗?
  • 是的,我是,这里是确切的代码: public static string[] topicContents = new string[] { "MECHANICS", "THEORY_OF_RELATIVITY" }; public static string[] VarItemsMechanics = new string[] { "Test", "Wavelength" };
  • 您发布的代码中没有错误,所以只有那几行代码我们无法辨别太多,我们只能猜测。

标签: c# string winforms listbox compare


【解决方案1】:

我认为在使用DataSource 时需要在Var 列表控件上设置DisplayMemberValueMember 属性。

如果 DataSource 是一个对象,那么 DisplayMember 是它将用作文本显示的对象成员(在您的情况下当前为空白),ValueMember 用于确定列表的 SelectedValue 属性对绑定有用的控件。

例如,如果您的 VarItemsMechanics 填充了以下类:

public class Mechanic
{
    public int ID { get; set; }
    public string Name { get; set; }
}

那么您可能希望将DisplayMember 设置为"Name",并且您可能希望将ValueMember 设置为"ID"(主观)。

【讨论】:

  • 对不起,我忘了提到VarItemsMechanics 是一个字符串数组,所以这也不起作用,很遗憾
【解决方案2】:

尝试改变

if (PhysCalc.Topic.GetItemText(PhysCalc.Topic.SelectedItem) == "MECHANICS")

到这里:

if (PhysCalc.Topic.Items[PhysCalc.Topic.SelectedIndex].ToString() == "MECHANICS")

【讨论】:

  • 在那种情况下,看看MessageBox.Show(PhysCalc.Topic.Items[PhysCalc.Topic.SelectedIndex].ToString())给你什么?
  • 一个错误,坦率地说:“* 的最佳重载方法匹配有一些无效参数”
  • 嗯。您发布的新代码看起来甚至无法编译...假设 PhysCalc.Topic 存在并且是一个 ListBox 控件,我认为 MessageBox 调用没有任何问题。
  • 我也没有,但不知何故无法解决...为什么我的代码不能编译?
  • 哦,我猜你正在使用设计器,所以你的 Topic 和 Var 定义存在于你的主代码之外。也许尝试将 MessageBox 调用更改为MessageBox.Show((PhysCalc.Topic.Items[PhysCalc.Topic.SelectedIndex]).ToString())
【解决方案3】:

1- 在 form_load 事件中绑定您的第一个名为“Topic”的列表

2- 在您的第一个列表的 SelectedIndexChanged 事件中检查所选项目

并填写第二个列表

这是完整的代码,它对我来说很好用

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
         public static string[] topicContents = new string[] { "MECHANICS", "THEORY_OF_RELATIVITY" };
        public static string[] VarItemsMechanics = new string[] { "Test", "Wavelength" };


        private void Form1_Load(object sender, EventArgs e)
        {
            listBox1.DataSource = topicContents;

        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string curItem = listBox1.SelectedItem.ToString();
            switch (curItem)
            {
                case "MECHANICS":
                   listBox2.DataSource = VarItemsMechanics;
                    break;
            }

        }
    }
}

【讨论】:

  • 嗯,我试过你的方法,但也没有成功。我在谷歌驱动器中发布了整个更改的课程,任何拥有 linc 能够制作 cmets 的人,也许你可以再看看它并评论有什么问题:docs.google.com/document/d/…
  • 我查看了您的代码,您应该将您的代码放入表单本身,case 语句 MECHANICS 字与您的数据源中的 MECHANICS 字不匹配,我尝试创建一个 Windows 应用程序并修复那个 switch case 语句,它对我来说很好
  • 除了直接放到表单中没有别的办法吗?我主要把它放在不同的类中,以便于对所有内容进行概览,因为以后会有更多的代码可供选择。而且我只是尝试将它放入表单类本身,坦率地说,这也不起作用。还有其他想法吗?无论如何,感谢您迄今为止的出色帮助:)
  • 好吧,我遇到了另一个错误:我更改了两个数组的内容,但它仍然显示旧值......对不起,如果我是一个完整的菜鸟,并且让你感到不安,但我非常感谢你的努力:)
  • 在 selectedindexchanged 事件中清除任何代码行之前的第二个列表 list2.items.clear();
猜你喜欢
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2019-06-17
  • 2015-04-04
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多