如何编写组合框以根据组合框中的选择在列表框中显示列表?

时间:2017-03-22 13:38:18

标签: c# string visual-studio combobox listbox

我正在尝试使用组合框中的选项根据组合框选择在列表框中显示特定列表。我正在使用C#。我收到两种类型的错误,每种错误有四种,每个if语句都有一个错误。

以下是两个错误代码:

错误CS0266无法将类型'object'隐式转换为'bool'。存在显式转换(您是否错过了演员?)

错误CS0029无法将类型'System.Collections.Generic.List'隐式转换为'string'

以下是我一直在处理的代码示例,在修复了一些错误和错误之后,我已经将其缩小到了搜索解决方案的范围。我找不到任何明确的解决方案。

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {


        ComboBox1.Items.Add("W");
        ComboBox1.Items.Add("X");
        ComboBox1.Items.Add("Y");
        ComboBox1.Items.Add("Z");


        String var;
        var = ComboBox1.Text;


        List<String> WList = new List<String>(){"W1", "W2", "..."};

        List<String> XList = new List<String>(){"X1", "X2", "..."};

        List<String> YList = new List<String>(){"Y1", "Y2", "..."};

        List<String> ZList = new List<String>(){"Z1", "Z2", "..."};


        if (ComboBox1.SelectedItem="W")
        {
        ListBox1.DisplayMember = WList;
        }

        if(ComboBox1.SelectedItem="X")
        {
        ListBox1.DisplayMember = XList;
        }

        if(ComboBox1.SelectedItem="Y")
        {
        ListBox1.DisplayMember = YList;
        }

        if (ComboBox1.SelectedItem="Z")
        {
        ListBox1.DisplayMember = ZList;
        }

        else
        {
        ListBox1.Text = "";
        }

2 个答案:

答案 0 :(得分:0)

首先,除非您想在每次组合框中的选择发生变化时添加新项目,否则不应在选择更改中向组合框添加新项目。我不认为那是你想要做的。您还应该在选择更改事件之外的其他地方准备字符串列表。

首先添加组合框项目和List<string>初始化所有内容,如Form1构造函数中所示:

List<String> WList;

List<String> XList;

List<String> YList;

List<String> ZList;

public Form1()
{
    InitializeComponent();

    comboBox1.Items.Add("W");
    comboBox1.Items.Add("X");
    comboBox1.Items.Add("Y");
    comboBox1.Items.Add("Z");

    WList = new List<String>() { "W1", "W2", "..." };

    XList = new List<String>() { "X1", "X2", "..." };

    YList = new List<String>() { "Y1", "Y2", "..." };

    ZList = new List<String>() { "Z1", "Z2", "..." };
}

此外,您正在使用=来比较您获得

的原因
  

错误CS0266无法将类型'object'隐式转换为'bool'。存在显式转换(您是否错过了演员?)

当您想验证两个值是否相等时,您应该使用==

然后在comboBox1_SelectedIndexChanged中您需要做的就是验证选择了哪个值并调整DataSource,最好使用else if,因为您永远不会拥有{{1}同时等于两个值:

combobox

答案 1 :(得分:0)

1)如果您比较字符串,则需要使用==运算符而非分配=运算符!

请更改

if(ComboBox1.SelectedItem="W")

要:

if(ComboBox1.SelectedItem == "W")

我不明白为什么每次用户选择一个项目时都会向你的组合框项目添加W,X,Y,Z,但要将列表放入列表框,你应该使用DataSource属性像这样:

if (ComboBox1.SelectedItem == "W")
{
    ListBox1.DataSource= WList;
}

2)请删除这部分代码:

String var;
var = ComboBox.Text;

var是一个关键字,不应该用作变量的名称! ComboBox是类名,而不是您的实例ComboBox1的名称。 ComboBox没有静态属性Text!只有实例ComboBox1注明名称中的 1 !请将其更改为

string temp = ComboBox1.Text;

3)您应该声明ComboBox1_SelectedIndexChanged事件处理程序范围之外的列表。否则,每当您在组合框中选择项目时,每次新建时都会不必要地创建它们