3

简单的问题:我正在检查一个组合框是否有一个用string.IsNullOrEmpty(). 问题是,即使选择了,也会出现错误消息。我究竟做错了什么?

这是我的代码:

private void button1Click(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(comboBox1.SelectedText))//here should skip to else - but doesn't
    {
        MessageBox.Show("You must select a conversion type", "Error");
    }
    else
    {
        if (comboBox1.SelectedText == "Currency")
        {
            double input = Convert.ToDouble(textBox1.Text);
            if (!string.IsNullOrEmpty(comboBox2.SelectedText))
            {
                string type = comboBox2.SelectedText;
                double result = convertCurrency(type, input);
                if (result != -1)
                {
                    label1.Text = Convert.ToString(result);
                }
             }
             else
             {
                 MessageBox.Show("You must select a conversion type", "Error");
             }
         }
         else
         {
             MessageBox.Show("curency");
         }
     } 
}

注意:这是我的第二个 C# 程序——所以如果我很愚蠢,请不要对我大喊大叫。

4

6 回答 6

8

通常有一些观察/建议。

首先,您使用字符串值并且基于这些值的逻辑,您可能希望研究使用枚举并将其所有值绑定到组合框。然后使用 SelectedItem 属性并将其与 Enum 进行比较。

当没有选择任何项时,SelectedItem 将返回 NULL,另一个选项是使用 SelectedIndex,当没有选择任何项目时,它将返回 -1。

因此,使用 SelectedIndex 它会变成这样;

if (comboBox1.SelectedIndex == -1)//Nothing selected
{
    MessageBox.Show("You must select a conversion type", "Error");
}
else
{
    //Do Magic   
}

通常,仅当无法进行诸如 int 比较甚至更好的 enum 比较之类的“强”操作时才应使用字符串比较。(也许这只是我,但字符串经常变化,对于这类东西来说只是可怕的。)

对于枚举建议,可以查看这些链接之一;

将枚举绑定到 WinForms 组合框,然后设置它

将枚举类型的值加载到组合框中

是否可以将项目从枚举加载到 .NET 3.5 中的组合框?

将 ComboBox 绑定到枚举

我不确定哪个 .NET 版本和您用作绑定的东西在 WPF 中比在旧 Windows 窗体中要容易得多(在我看来)。

于 2013-08-08T09:39:41.820 回答
1
private void button2_Click(object sender, EventArgs e)
{
    if (comboBox1.SelectedIndex==-1)
    {
        MessageBox.Show("You must select a conversion type", "Error");
    }
    else
    {
        MessageBox.Show("Selected");
    }

}
于 2013-08-08T09:41:57.043 回答
1

来自MSDN doc,这完全回答了您的问题

您可以使用 SelectedText 属性来检索或更改 ComboBox 控件中当前选定的文本。但是,您应该知道,由于用户交互,选择可能会自动更改。例如,如果您在按钮 Click 事件处理程序中检索 SelectedText 值,则该值将是一个空字符串。这是因为当输入焦点从组合框移动到按钮时,选择会自动清除。

于 2013-08-08T09:51:22.123 回答
1

另一种解决方案:您可以通过检查索引超出范围的条件(不可能有哪个项目)来检查组合框是否选择了一个项目,然后,如果它没有可能的值,您可以设置它手动。

if (comboBox1.SelectedIndex == -1) //index out of range
    {
        //show the error message 
        comboBox1.SelectedIndex = 1; //set the first value to the combo box
    }
    else
    {
        //continue   
    }
于 2020-05-21T00:50:57.337 回答
0

微软的命名很糟糕。您应该使用 comboBox.Text 来获取您要查找的内容。

comboBox.SelectedIndex所选值的索引

comboBox.SelectedItem如果您使用数据源,这是在数据源中选择的项目

comboBox.SelectedValue数据源的 ValueMember 或当前选择的值(如果您添加了自己的项目)

comboBox.Text您看到的文本,即使它不在列表中

.SelectedText, 是指在 .Text 中选择(突出显示)的文本

于 2015-08-19T13:24:56.447 回答
0
private void Resetbtn_Click(object sender, EventArgs e)
{    
    comboBox1.Items.Clear();
    //Student is a combobox elements.Add again.
    comboBox1.Items.Add("Student");  
    comboBox1.Items.Add("Staff");

}
于 2015-10-18T06:43:28.440 回答