3

我正在制作一个类似 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
        {

        }
    }
}
4

3 回答 3

2

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

如果只是设计表单的布局,我建议照常设计。当你完成你的项目后,你可以用外部类(在两个文件中)包围这个类并将其设为私有。

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

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
    }
}
于 2012-07-22T21:29:28.677 回答
0

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

private partial class MessageBoxCustomDialog : Form
{}
于 2012-07-22T18:37:59.743 回答
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 [限制部分]

于 2012-07-22T18:43:46.557 回答