C#或vba复选框

C#或vba复选框,c#,windows,checkbox,C#,Windows,Checkbox,我是新来的,我有一个问题(我认为解决办法很简单,但我不能独自解决这个问题)。我必须在userform上加几个复选框(这很简单),但当我写这样的东西时: if(checkBox1.Checked) { MessageBox.Show("ok1"); } else if(checkBox1.Checked && checkBox2.Checked) { MessageBox.Show("ok2"); } else { MessageBox.Show("co n

我是新来的,我有一个问题(我认为解决办法很简单,但我不能独自解决这个问题)。我必须在userform上加几个复选框(这很简单),但当我写这样的东西时:

if(checkBox1.Checked)
{
    MessageBox.Show("ok1");
}
else if(checkBox1.Checked && checkBox2.Checked)
{
    MessageBox.Show("ok2");
}
else
{
    MessageBox.Show("co nie tak");
}
始终获取“ok1”MsgBox


知道我做错了什么吗?感谢您的帮助。

if语句将始终进入第一个为true的块。因此,如果选中复选框1,您将始终得到“ok1”。您永远无法进入第二个块(“ok2”),因为如果它为真,第一个检查也将为真

我想你应该换支票:

if(checkBox1.Checked && checkBox2.Checked)
{
    MessageBox.Show("ok2");
}
else if(checkBox1.Checked)
{
    MessageBox.Show("ok1");
}
else
{
    MessageBox.Show("co nie tak");
}
您可能还希望通过添加来构建字符串。+=表示在字符串末尾添加

我的示例代码只是一个示例,因为我不知道您想做什么,但它可能会给您一些想法

if (checkBox1.checked )
{
  mic.HTMLBody = "1) Example1";
}
if ( checkBox2.checked )
{
  mic.HTMLBody += "<br>"""2) Example2";
  if ( ComboBox2.Text == "Pan" )
  {
     mic.HTMLBody += "<br>Pana";
  }
}
if(复选框1.checked)
{
mic.HTMLBody=“1)Example1”;
}
如果(复选框2.checked)
{
mic.HTMLBody+=“2)示例2”;
如果(ComboBox2.Text==“平移”)
{
mic.HTMLBody+=“
Pana”; } }
在当前编写时,它不可能输入
else if
,因为每当
else if
条件为真时,
if
条件也为真

它从上到下,输入第一个为真的,其余的忽略

相反,您应该按如下方式切换它们的位置:

if(checkBox1.Checked && checkBox2.Checked)
{
    MessageBox.Show("ok2");
}
else if(checkBox1.Checked)
{
    MessageBox.Show("ok1");
}
else
{
    MessageBox.Show("co nie tak");
}
有点不清楚您真正想要显示的内容,但如果您希望先显示
ok1
,然后再显示
ok2
,则可以执行以下操作:

if(checkBox1.Checked)
{
    MessageBox.Show("ok1");
    if(checkBox2.Checked) {
        MessageBox.Show("ok2");
        //MessageBox.Show("ok1 ok2"); //If you want to show them both at the same time
    }
}
else
{
    MessageBox.Show("co nie tak");
}

从代码中,我看到如果checkbox1.checked为true,则应显示“ok1”,并且第二个和第三个评估值将永远不会被评估。如果checkbox1.checked为false,则仅评估第三个选项,而不应评估第二个选项。应更像:

if (checkBox1.Checked)
    {
        if (checkBox2.Checked)
            {
                 MessageBox.Show("ok2");
            }

       else
           {
                 MessageBox.Show("ok1");
            }
    }
 else 
    {
        MessageBox.Show("co nie tak");
    }

我在控制台上尝试了这一点,这可能是您所需要的逻辑。内联注释将让您了解正在做什么:

check1 = true;
check2 = true;

if (check1)
{
    if (check2)
    {
        // Prints if BOTH check1 and check2 are TRUE
        Console.WriteLine("ok2");
    }
    else
    {
        // Prints if ONLY check1 is TRUE
        Console.WriteLine("ok1");
    }
}
else
{
    // Prints if BOTH check1 and check2 are FALSE
    Console.WriteLine("co nie tak");
}

为什么你认为你做错了什么?第二个语句的计算结果是正确的,因为它是写的,不可能进入
ok2
。需要更多的代码bryy我的错误-总是得到“ok1”“MsgBox…您应该始终在问题中包含您想要的行为。那么,当您期望一些输出时,您还希望看到什么?每个复选框的
选中值是多少?好的,那么您应该切换它们。在
if
中的
else if
中放置条件,在
else if
中放置
if
条件,如果
请不要在没有任何解释文本的情况下使用代码回答。不清楚您为什么将此代码作为“答案”编写。此外,仅使用
if
和no
else if
(并在末尾添加一个“random”
else
),这不是一个非常有效的解决方案使用什么(循环、函数等)可以使其正常工作?您将切换检查。如果你想切换你的信息,由你决定。德里克·thx-这是工作:)但是,当我15岁和3岁时,选择组合框;我必须从循环15CB和3组合开始下降?你是说所有15个复选框都被选中了吗?我不知道你在说什么。@NewOneInP请花点时间,写下你真正想要的东西的完整解释,通读课文以确保人们理解,然后发布/编辑你的问题。目前,您所说的许多不同的事情都很难理解,您不需要
复选框1.Checked&&
,因为这已经得到了确认,但除此之外,这看起来是一个很好的解决方案。感谢您提供的见解Bobajob:)
check1 = true;
check2 = true;

if (check1)
{
    if (check2)
    {
        // Prints if BOTH check1 and check2 are TRUE
        Console.WriteLine("ok2");
    }
    else
    {
        // Prints if ONLY check1 is TRUE
        Console.WriteLine("ok1");
    }
}
else
{
    // Prints if BOTH check1 and check2 are FALSE
    Console.WriteLine("co nie tak");
}