无法将DialogResult隐式转换为MessageBoxResult

时间:2012-10-03 15:01:14

标签: c# wpf

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

起初我认为这只是一个缺少的导入,所以我放入了导入的System.Windows.Forms,但它无济于事,因为这样做会在我的实际消息框上引发错误,即'MessageBox'是一个不明确的参考'System.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;
    }

我已经包含了整个方法,只是你需要任何东西。

3 个答案:

答案 0 :(得分:6)

鉴于您现在已经解释过这是一个WPF应用,如果您使用System.Windows.MessageBox.Show,则应该与System.Windows.MessageBoxResult进行比较。

基本上,如果你正在做WPF,你几乎肯定不希望任何提及System.Windows.Forms,反之亦然。 (我很惊讶这完全是编译 - 你有两个组件的引用吗?这通常是一个坏主意......)

此外,您需要使用==进行比较,而不是=(作业)

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

if (result == MessageBoxResult.Yes)
{
    ...
}

答案 1 :(得分:3)

我认为你的Windows窗体和WPF已经混淆了 - 如果你使用的是WPF MessageBox,那么你的返回值会有所不同。

所以它不是

messagebox = System.Windows.Forms.DialogResult.Yes

这是

messagebox == System.Windows.MessageBoxResult.Yes

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

答案 2 :(得分:-1)

你的问题在这里:

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

首先,您要将DialogResult分配到MessageBox。其次,您试图将DialogResultMessageBox进行比较。尝试类似:

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

或者您可以将DialogResult分配到自己的变量中,并进行比较。