2

我收到错误“无法将类型 'System.Windows.Forms.DialogResult' 隐式转换为 System.Windows.MessageBoxResult”

起初我以为这只是一个缺失的导入,所以我输入了导入的 System.Windows.Forms 但它没有用,因为这样做会在我的实际消息框上引发一个错误,即“MessageBox”是“System.Windows”之间的模棱两可的引用。 Windows.MessageBox' 和 'System.Windows.Forms.MessageBox' (这不难弄清楚:P)但原始消息保持不变。

    private void DisplayOnWebsiteChecked(Object sender, EventArgs e)
    {
        var departments = model.Name;
        var departmentChildren = model.Children;

        var messagebox = MessageBox.Show("Do you wish to hide all sub deparments and products.",
             "List of Box",
             MessageBoxButton.YesNo);

        if (messagebox = System.Windows.Forms.DialogResult.Yes)
        {
            if (departmentChildren != null)
            {
                int zeroChildren = 0;

                if (departmentChildren.Count.Equals(zeroChildren)) ;
                 {
                    foreach (Department Children in departmentChildren)
                        Children.IsVisibleOnWebsite = false;
                }
            }
        }
        else
            return;
    }

我已经包含了整个方法,以防你需要它的任何东西。

4

3 回答 3

6

鉴于您现在已经解释说这是一个 WPF 应用程序,如果您正在使用System.Windows.MessageBox.Show,您应该与System.Windows.MessageBoxResult.

基本上,如果您正在使用 WPF,您几乎肯定不想提及System.Windows.Forms反之亦然。(我很惊讶这是在编译 - 你是否引用了这两个程序集?这通常是一个坏主意......)

此外,您需要==用于比较,而不是=(分配)

var result = MessageBox.Show(...);

if (result == MessageBoxResult.Yes)
{
    ...
}
于 2012-10-03T15:07:09.977 回答
3

我认为您将 Windows 窗体和 WPF 混淆了 - 如果您使用的是WPF MessageBox,那么您的返回值是不同的。

所以不是

messagebox = System.Windows.Forms.DialogResult.Yes

它是

messagebox == System.Windows.MessageBoxResult.Yes

另请注意,==否则您正在分配值,并且 if 测试将始终成功(带有编译器警告)。

于 2012-10-03T15:09:47.310 回答
-1

你的问题在这里:

  if (messagebox = System.Windows.Forms.DialogResult.Yes)

首先,您将 a 分配DialogResult到 aMessageBox中。其次,您试图将 aDialogResult与 a进行比较MessageBox。尝试类似:

if(MessageBox.Show("Message", MessageBoxButtons.YesNo) == DialogResult.Yes)

或者您可以将 DialogResult 分配给它自己的变量,然后进行比较。

于 2012-10-03T15:09:53.140 回答