浓缩两个字符串并将其打印在标签c#wpf上

浓缩两个字符串并将其打印在标签c#wpf上,c#,wpf,C#,Wpf,我有几个单选按钮存储在两个不同的字符串中。 我需要把它们印在标签上装订在一起。我怎么做 private void Button_Click(object sender, RoutedEventArgs e) { String cad1 = null; String cad2 = null; if (rad1.IsChecked == true) { cad1 = "Ok";

我有几个
单选按钮
存储在两个不同的字符串中。 我需要把它们印在标签上装订在一起。我怎么做

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        String cad1 = null;
        String cad2 = null;

        if (rad1.IsChecked == true)
        {
            cad1 = "Ok";
        }
        else if (rad2.IsChecked == true)
        {
            cad1 = "Ok Cancel!";
        }
        else if (rad3.IsChecked == true)
        {
            cad1 = "Yes No";
        }
        else if (rad4.IsChecked == true)
        {
            cad1 = "Yes  No Cancel";
        }
        else if (rad5.IsChecked == true)
        {
            cad1 = "Retry Cancel";
        }
        else if (rad6.IsChecked == true)
        {
            cad1 = "Abort Retry Cancel";
        }
        else if (rad7.IsChecked == true)
        {
            cad2 = "Information";
        }
        else if (rad8.IsChecked == true)
        {
            cad2 = "Exclamation";
        }
        else if (rad9.IsChecked == true)
        {
            cad2 = "Question";
        }
        else if (rad10.IsChecked == true)
        {
            cad2 = "Error";
        }
我需要打印这两个字符串的结果,但目前还没有打印第二个字符串

        cad1 = cad1 + cad2;
        lab2.Content = cad1;

    }
}

在if-else链中,您从未为cad1和cad2设置值,因此无法获得正确的输出

要想得到你想要的东西,最简单的方法就是把链子分开,让它看起来像这样

    ... 
    else if (rad6.IsChecked == true)
    {
        cad1 = "Abort Retry Cancel";
    }

    if (rad7.IsChecked == true)
    {
        cad2 = "Information";
    }
    ...

原因是所有cad2变量都包含在else if语句中

修改行

else if (rad7.IsChecked == true)
将来

if (rad7.IsChecked == true)
编辑
我还建议删除所有
==true
,它们是不必要的。 如果此事件后未使用
cad1
cad2
,我建议创建一个字符串变量,并将
cad1
cad2
的值附加到该变量上

var cont = "";  
if (rad1.IsChecked) cont += "Ok";  
...  
if (rad7.IsChecked) cad2 += "Information";  
...
lab2.Content = cont;

Elsif仅在第一个if为非真时计算,因此如果cad1获得值,cad2永远不会获得值

此外,
if(rad9.IsChecked==true)
与'if(rad9.IsChecked)'完全相同

最后,如果您使用的是最新版本的C#,您可以使用ternaty操作符:

var cad1 = rad1.IsChecked
           ? "Ok"
           : rad2.IsChecked 
             ? "Ok Cancel!"
             : rad3.IsChecked
               ? "Yes No"
               : rad4.IsChecked
                 ? "Yes  No Cancel"
                 : rad5.IsChecked
                   ? "Retry Cancel"
                   : rad6.IsChecked
                     ? "Abort Retry Cancel"
                     : null;
var cad2 = rad7.IsChecked
           ? "Information"
           : rad8.IsChecked
             ? "Exclamation"
             : rad9.IsChecked
               ? "Question"
               : rad10.IsChecked
                 ? "Error"
                 : null;
或者,如果您喜欢更简洁的话:

var cad1 = rad1.IsChecked ? "Ok"
         : rad2.IsChecked ? "Ok Cancel!"
         : rad3.IsChecked ? "Yes No"
         : rad4.IsChecked ? "Yes  No Cancel"
         : rad5.IsChecked ? "Retry Cancel"
         : rad6.IsChecked ? "Abort Retry Cancel"
         : null;
var cad2 = rad7.IsChecked ? "Information"
         : rad8.IsChecked ? "Exclamation"
         : rad9.IsChecked ? "Question"
         : rad10.IsChecked? "Error"
         : null;

现在,我想知道rad1-10是否是单选按钮,为什么我不能从名称中看出哪些属于同一组。我希望1-6在一组中,7-10在另一组中,但更好的命名可以避免混淆和可能的错误…

从来没有一种情况下您同时为
cad1
cad2
赋予值。从来没有。在胡乱猜测发生了什么之前,请始终设置断点并使用调试器检查变量的值。显然,在您的情况下,cad2为null。我使用@Tubs answer尝试过它,它对我来说非常有效,但它是真的,如果我将两个变量初始化为null,我可能会遇到问题。Thaks you:)你说得对,但我正在学习,这是我的第三个练习。我已经上课两周了。三元运算符似乎很难从:D开始