C# 获取参数的组合框值

C# 获取参数的组合框值,c#,C#,对于我的项目,我使用一个库,它有一个预定义选项列表。我希望能够从组合框中进行选择,这样我就不必每次都编辑源代码 主代码:搜索玩家。等级可以设置为金、银、铜或全部。我想能够从组合框中选择它。当我单击一个按钮运行此代码时,会显示结尾处的错误 var searchRequest = new SearchRequest(); var searchParameters = new PlayerSearchParameters { Page = 1, Level = comboBox1.Se

对于我的项目,我使用一个库,它有一个预定义选项列表。我希望能够从组合框中进行选择,这样我就不必每次都编辑源代码

主代码:搜索玩家。等级可以设置为金、银、铜或全部。我想能够从组合框中选择它。当我单击一个按钮运行此代码时,会显示结尾处的错误

var searchRequest = new SearchRequest();
var searchParameters = new PlayerSearchParameters
{
    Page = 1,
    Level = comboBox1.SelectedItem == null ? Level.All : (Level)(comboBox1.SelectedItem as ComboboxItem).Value,
    //usually set like this Level - Level.Gold,
};
组合框代码:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    foreach (Level level in Enum.GetValues(typeof(Level)))
    {
        ComboboxItem item = new ComboboxItem();
        item.Text = level.ToString();
        item.Value = level;
        comboBox1.Items.Add(item);
    }
}
ComboboxItem代码:

public class ComboboxItem
{
    public string Text { get; set; }
    public object Value { get; set; }

    public override string ToString()
    {
        return Text;
    }
}
我原以为所有这些都可以工作,但它给出了一个错误,即用户代码未损坏NullReferenceXeption。对象引用未设置为对象的实例

我真的需要你帮我把这件事做好

非常感谢您的帮助

谢谢


杰克。

您可以直接从enum绑定
组合框1
,如下所示

comboBox1.DataSource  =Enum.GetNames(typeof(Level));
然后,如果需要获取选定的枚举

Level level ; 
if( Enum.TryParse<Level>(comboBox1.SelectedValue.ToString(), out level))
{ 
        var searchParameters = new PlayerSearchParameters
        {
            Page = 1,
            Level =level 
        };
}
Level;
if(Enum.TryParse(comboBox1.SelectedValue.ToString(),out-level))
{ 
var searchParameters=新播放器搜索参数
{
第页=1,
级别=级别
};
}

您可以直接从enum绑定
组合框1
,如下所示

comboBox1.DataSource  =Enum.GetNames(typeof(Level));
然后,如果需要获取选定的枚举

Level level ; 
if( Enum.TryParse<Level>(comboBox1.SelectedValue.ToString(), out level))
{ 
        var searchParameters = new PlayerSearchParameters
        {
            Page = 1,
            Level =level 
        };
}
Level;
if(Enum.TryParse(comboBox1.SelectedValue.ToString(),out-level))
{ 
var searchParameters=新播放器搜索参数
{
第页=1,
级别=级别
};
}

运行您在此处发布的内容后-我唯一收到
NullReferenceXeption
的时间是在
组合框中未选择任何内容时单击搜索按钮

您需要首先检查null。就像这样

if (comboBox1.SelectedItem != null)
{
     var searchRequest = new SearchRequest();
     var searchParameters = new PlayerSearchParameters
     {
          Page = 1,
          Level = (Level)(comboBox1.SelectedItem as ComboboxItem).Value,
          //usually set like this Level - Level.Gold,
     };
}

运行您在此处发布的内容后-我唯一收到
nullreferencexeption
的时间是在
组合框中尚未选择任何内容时单击搜索按钮

您需要首先检查null。就像这样

if (comboBox1.SelectedItem != null)
{
     var searchRequest = new SearchRequest();
     var searchParameters = new PlayerSearchParameters
     {
          Page = 1,
          Level = (Level)(comboBox1.SelectedItem as ComboboxItem).Value,
          //usually set like this Level - Level.Gold,
     };
}


您在何处定义了Combobox1引发异常的位置?此外,您还需要确保选择了combobox中的项目combobox 1位于windows窗体应用程序上。第二个代码片段在线程内部。当我搜索播放器时,当我单击按钮阅读第一个代码片段时,会出现错误。这可能会对您有所帮助。您在哪里定义了Combobox1引发异常的位置?此外,您还需要确保选择了combobox中的项目combobox 1位于windows窗体应用程序上。第二个代码片段在线程内部。当我搜索播放器时,当我单击按钮阅读第一个代码片段时,会出现错误。这可能会对您有所帮助。谢谢您,但我收到一个错误,说不能将“level”作为ref或out参数传递,因为它是“foreach迭代变量”,如果我很愚蠢,请原谅,我对这一点相当陌生。如果使用我的答案,则不需要在
SelectedIndexChanged
中添加项目。在
SelectedIndexChanged
事件中删除或注释添加代码的项目。我想我几乎已经让它工作了。但两个错误并没有消失。这是我的代码和错误的截图。我想这是因为它需要以一个“,”结尾,但我不确定我怎么能做到。谢谢你,但我得到一个错误,说不能将“level”作为ref或out参数传递,因为它是一个“foreach迭代变量”,如果我很愚蠢的话,我对这一点相当陌生。如果使用我的答案,则不需要在
SelectedIndexChanged
中添加项目。在
SelectedIndexChanged
事件中删除或注释添加代码的项目。我想我几乎已经让它工作了。但两个错误并没有消失。这是我的代码和错误的截图。我想这是因为它需要以一个“,”结尾,但我不确定我怎么能做到。我检查了null,结果成功了!新错误:(.当我单击搜索按钮时,它现在显示“设置DataSource属性时无法修改Items集合”,然后突出显示comboBox1.Items.Add(item);删除组合框上的
SelectedIndexChanged
事件。据我所知,我不认为有任何必要。您现在将级别枚举绑定为组合框的数据源。但是,我在执行此操作时出错很多。您的意思是从这里删除它吗?private void Combox1\u SelectedIndexChanged(object sender,EventArgs e)如果您使用的是VS-只需进入组合框的属性-然后进入事件(橙色闪电)然后从那里删除它。否则它也将在
设计器中设置,这样做比手动删除它更容易、更安全。我检查了null,它成功了!但出现了新错误:(.当我单击搜索按钮时,它现在说“设置数据源属性时无法修改Items集合。”然后突出显示comboBox1.Items.Add(item);删除组合框上的
SelectedIndexChanged
事件。据我所知,我不认为有任何必要。您现在将级别枚举绑定为组合框的数据源。但是,我在执行此操作时出错很多。您的意思是从这里删除它吗?private void Combox1\u SelectedIndexChanged(object sender,EventArgs e)如果您使用的是VS-只需进入组合框的属性-然后转到事件(橙色闪电)并将其删除。否则它也将在
设计器中设置,这样做比手动删除它更简单、更安全。