-2

我正在处理 Windows 窗体。我面临着非常奇怪的问题。

在其中一个按钮事件处理程序中,我应用了 if 和 else 条件。

问题是 if 条件和 else 条件都被执行了。

有人能指出我哪里错了吗?

private void button1_Click(object sender, EventArgs e)
        {
            if (radioButton1.Checked == true && checkEbayName(textBox1.Text) == true )
            {
                DataSet ds = GetUserByEbayName(textBox1.Text);
                if (ds == null)
                    {
                        return;
                    }
                dataGridView1.DataSource = ds.Tables["Customer"];

            }

            if (radioButton2.Checked == true && checkName(textBox1.Text) == true)
            {
                DataSet ds = GetUserByName(textBox1.Text);
                //if (checkCustomer(textBox1.Text, textBox2.Text) == true)
                //{
                if (ds == null)
                {
                    return;
                }
                dataGridView1.DataSource = ds.Tables["Customer"];
            }

            else
            {
                MessageBox.Show("No Customer with matching details");
            }

        }
4

4 回答 4

6

如果第一个if没有执行,你的 else 将被解雇。我怀疑你想用else if你的第二个if

正如您的代码所代表的那样,第一个if可能评估为真。然后逻辑就会落入第二个if。如果不满足该条件,else则将执行。

于 2013-02-15T15:03:39.243 回答
0

也许你在第一个 if 中遗漏了一个 return 语句?

if (radioButton1.Checked == true && checkEbayName(textBox1.Text) == true )
{
    DataSet ds = GetUserByEbayName(textBox1.Text);
   if (ds == null)
   {
        return;
   }

   dataGridView1.DataSource = ds.Tables["Customer"];
   return;
}
于 2013-02-15T15:05:09.957 回答
0

如果radiobutton1选中,则执行第一个条件,如果ds is not null您的代码不返回但检查第二个 if。如果两个单选按钮互斥,则这不能为真,否则将执行。

如果您想在网格没有客户的情况下显示一个消息框,您可以重写代码以在最后检查空 ds

DataSet ds = null;
if (radioButton1.Checked == true && checkEbayName(textBox1.Text) == true )
{
    ds = GetUserByEbayName(textBox1.Text);
    if (ds != null)
        dataGridView1.DataSource = ds.Tables["Customer"];
}
else if (radioButton2.Checked == true && checkName(textBox1.Text) == true)
{
    ds = GetUserByName(textBox1.Text);
    if (ds != null)
        dataGridView1.DataSource = ds.Tables["Customer"];
}

// Show the user that we have not found customers not by ebayname or username
if(ds == null)
    MessageBox.Show("No Customer with matching details");
于 2013-02-15T15:06:33.547 回答
0

如果满足匹配 if 的条件,则永远不会执行 else。但是,您必须将 if 分开,而第二个不取决于第一个。您的代码的简化版本是

if(a){
   if(d) {
      return;
   }
}

if(b){}
else{
}

在 a 或 d 为假的情况下,执行将进入第二个 if。如果 b 也是假的,那么 else 将被执行。

如果您打算仅在 a 和 b 都为 false 的情况下执行 else,那么您必须执行以下操作

if (radioButton1.Checked == true && checkEbayName(textBox1.Text) == true ) {
 //...

} else if (radioButton2.Checked == true && checkName(textBox1.Text) == true) {
  //...
} else {
            MessageBox.Show("No Customer with matching details");
}
于 2013-02-15T15:08:06.883 回答