C++ “如何删除按钮”;一页“&引用;两页“&引用;“六页”;在printpreviewdialog中?

C++ “如何删除按钮”;一页“&引用;两页“&引用;“六页”;在printpreviewdialog中?,c++,winforms,visual-studio-2012,print-preview,C++,Winforms,Visual Studio 2012,Print Preview,我想知道如何删除printPreviewDialog中的“一页”、“两页”等按钮和“页面”按钮?我使用C++ Windows窗体VisualStudio 2012。 谢谢,PrintPreviewDialog只是一个使用PrintPreviewControl的对话框的样板实现。如果您想要自己的设计,您应该实现自己的对话框 然而,这在.NET中可能会被搞乱。这些按钮是类的私有成员,因此您不能在自己的代码中访问它们。NET中的反射支持提供了一个后门,您可以使用BindingFlags::NonPub

我想知道如何删除printPreviewDialog中的“一页”、“两页”等按钮和“页面”按钮?我使用C++ Windows窗体VisualStudio 2012。
谢谢,PrintPreviewDialog只是一个使用PrintPreviewControl的对话框的样板实现。如果您想要自己的设计,您应该实现自己的对话框

然而,这在.NET中可能会被搞乱。这些按钮是类的私有成员,因此您不能在自己的代码中访问它们。NET中的反射支持提供了一个后门,您可以使用BindingFlags::NonPublic访问私有字段。使其看起来与此类似(使用默认名称):

使用名称空间系统::反射;
...
表格1(无效)
{
初始化组件();
数组^names=gcnew数组{“onepageToolStripButton”,
“twopagesToolStripButton”、“threepagesToolStripButton”,
“fourpagesToolStripButton”、“sixpagesToolStripButton”,
“分离器ToolStripSeparator 1”};
对于(intix=0;ixLength;ix++){
FieldInfo^fi=printPreviewDialog1->GetType()->GetField(名称[ix],
BindingFlags::非公共| BindingFlags::实例);
ToolStripItem^item=safe_cast(fi->GetValue(printPreviewDialog1));
删除项目;
}
}
在运行时如下所示:

using namespace System::Reflection;
...
    Form1(void)
    {
        InitializeComponent();
        array<String^>^ names = gcnew array<String^> {"onepageToolStripButton", 
            "twopagesToolStripButton", "threepagesToolStripButton", 
            "fourpagesToolStripButton", "sixpagesToolStripButton",
            "separatorToolStripSeparator1"};
        for (int ix = 0; ix < names->Length; ix++) {
            FieldInfo^ fi = printPreviewDialog1->GetType()->GetField(names[ix], 
                BindingFlags::NonPublic | BindingFlags::Instance);
            ToolStripItem^ item = safe_cast<ToolStripItem^>(fi->GetValue(printPreviewDialog1));
            delete item;
        }
   }