部分嵌套的Form类与设计器

时间:2012-07-22 18:28:09

标签: c# winforms dialog partial nested-class

我正在创建类似MessageBox(MessageBoxCustom)。 我希望在一个单独的文件中有一个带有设计器支持的表单,以便我可以通过Visual Studio(MessageBoxCustomDialog)修改外观。

我还想通过MyMessageBox外部的代码使这个MessageBoxCustomDialog无法访问,并且我正在嵌套MessageBoxCustomDialog。我想将它移到一个单独的文件中,所以我有设计师的支持。也许使用部分课程?层次结构将如何发展?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace System.Windows.Forms
{
    public static class MessageBoxCustom
    {
        public static void Show()
        {
            (new MessageBoxCustomDialog()).ShowDialog();
        }

        private class MessageBoxCustomDialog : Form
        {

        }
    }
}

3 个答案:

答案 0 :(得分:2)

Visual Studio Designer无法帮助您设计嵌套类。它不是为此而做的。它检查文件中第一个最外层类的类型,然后决定使用哪个设计器。

如果只是设计表单的布局,我建议像往常一样设计它。完成项目后,您可以通过外部类(在两个文件中)包围该类,并将其设为私有。

当您完成工作时,只需将对话框类复制并粘贴到外部类中并将其设为私有。如果你必须重新设计它,它只需要复制和粘贴。

MessageBoxCustomDialog.cs:

namespace System.Windows.Forms
{
    // make sure this is the first class in the file (required by designer)
    public partial class MessageBoxCustomDialog : Form
    {
        public MessageBoxCustomDialog()
        {
            InitializeComponent();
        }
    }

    public static partial class MessageBoxCustom
    {
        public static void Show()
        {
            new MessageBoxCustomDialog().ShowDialog();
        }

        // put the MessageBoxCustomDialog class here when you are done
    }
}

MessageBoxCustomDialog.Designer.cs:

namespace System.Windows.Forms
{
    partial class MessageBoxCustomDialog
    {
        ...
    }

    partial class MessageBoxCustom
    {
        // put the MessageBoxCustomDialog class here when you are done
    }
}

答案 1 :(得分:0)

使MessageBoxCustomDialog成为私有的部分内部类

private partial class MessageBoxCustomDialog : Form
{}

答案 2 :(得分:0)

您必须使MessageBoxCustom部分具有相同的MessageBoxCustomDialog

范围

文件1

using System.Windows.Forms;

namespace System.Windows.Forms
{
    public static partial class MessageBoxCustom
    {
        public static void Show()
        {
            (new MessageBoxCustomDialog()).ShowDialog();
        }

        private partial class MessageBoxCustomDialog : Form
        {

        }
    }
}

文件2

using System.Windows.Forms;

namespace System.Windows.Forms
{
    public static partial class MessageBoxCustom
    {
        private partial class MessageBoxCustomDialog : Form
        {
            // designer code
        }
    }
}

您可能会看到此链接http://msdn.microsoft.com/en-us/library/wa80x488.aspx [限制部分]