Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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中的另一个字符串进行比较_C#_String_Winforms_Listbox_Compare - Fatal编程技术网

C# 如何将列表框中的选定字符串与c中的另一个字符串进行比较

C# 如何将列表框中的选定字符串与c中的另一个字符串进行比较,c#,string,winforms,listbox,compare,C#,String,Winforms,Listbox,Compare,对于我的windows窗体应用程序,我试图从列表框中检索所选字符串,并希望将其与设置的字符串进行比较,以便在比较返回true时,可以将下一个列表框设置为具有特定的、与选择相关的值 namespace PhysCalc { public class Selectors { public static string[] topicContents = new string[] { "MECHANICS", "THEORY_OF_RELATIVITY" };

对于我的windows窗体应用程序,我试图从列表框中检索所选字符串,并希望将其与设置的字符串进行比较,以便在比较返回true时,可以将下一个列表框设置为具有特定的、与选择相关的值

    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;
        }
    }
}
}
但不知怎的,当我在上面名为“Topic”的代码中选择ListBoxMechanics时,上面名为“Var”的第二个ListBoxMechanics就保持为空


非常感谢您提供的任何帮助

我认为在使用数据源时,您需要在Var list控件上设置DisplayMember和ValueMember属性

如果数据源是一个对象,那么DisplayMember是它将用作文本显示的对象成员,在您的情况下,它当前为空,ValueMember用于确定列表控件的SelectedValue属性,该属性可用于绑定

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

public class Mechanic
{
    public int ID { get; set; }
    public string Name { get; set; }
}
然后,您可能希望将DisplayMember设置为Name,并将ValueMember设置为ID。请尝试更改

if (PhysCalc.Topic.GetItemText(PhysCalc.Topic.SelectedItem) == "MECHANICS")
为此:

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

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

        }
    }
}

什么是VarItemsMechanics?感谢您没有发布;它是一个数组,应该设置为“Var”列表框的数据源。你确定你的VarItemsMechanics不是空的吗?是的,我是空的,下面是确切的代码:public static string[]topicContents=new string[]{力学,相对论};公共静态字符串[]VarItemsMechanics=新字符串[]{Test,Wavelength};您发布的代码中没有bug,因此只有几行代码我们看不清,只能猜测。抱歉,我忘了提到VarItemsMechanics是一个字符串数组,因此这也不起作用,不幸的是,在这种情况下,请参见MessageBox.ShowPhysCalc.Topic.Items[PhysCalc.Topic.SelectedIndex].ToString给了您一个错误,坦白地说:与*匹配的最佳重载方法有一些无效的argumentsHmm。你发布的新代码看起来甚至无法编译。。。假设PhysCalc.Topic存在并且是一个ListBox控件,我看不出MessageBox调用有任何错误。我也没有看到,但它不知何故不起作用……为什么我的代码不应该编译?哦,我猜您使用的是设计器,所以您的主题和变量定义存在于主代码之外。也许可以尝试将MessageBox调用更改为MessageBox.ShowPhysCalc.Topic.Items[PhysCalc.Topic.SelectedIndex].ToString?嗯,我尝试了你的方法,但也没有成功。我在google drive上发布了整个修改过的类,任何拥有linc的人都可以发表评论,也许你可以再看一眼,评论一下有什么问题:我看了你的代码,你应该把代码放在表单中,而且case-statement-MECHANICS单词与数据源中的MECHANICS单词不匹配,我试着创建一个windows应用程序,并修复了switch case语句,它对我来说很好。除了直接将它放入表单中,没有其他方法吗?我主要将它放在不同的类中,以便更容易地对所有内容进行概述,因为以后将有更多的内容需要编写代码以供选择。我只是试着把它放到form类中,坦白说,这也不起作用。还有其他想法吗?无论如何,感谢您迄今为止的出色帮助:好吧,我遇到了另一个错误:我更改了两个数组的内容,但它仍然保持显示旧值。。。很抱歉,如果我在这方面是一个彻头彻尾的傻瓜,并且让你感到不安,但我非常感谢你的努力:在selectedindexchanged事件中,在任何代码行之前清除第二个列表,list2.items.clear;