2

我在窗口中有以下代码。

private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
    Help helpWindow=new Help();
    helpWindow.MdiParent = this;
    helpWindow.BringToFront();
    helpWindow.Show();        
}

窗口代码如下。

public Help()
{
    InitializeComponent();
    axAcroPDF1.LoadFile(@"D:\sample.pdf");
}

如果我使用上面的代码,我无法在我的子窗口中查看 pdf。但是,如果我从父窗口中删除下面的代码helpWindow.MdiParent = this; ,我可以查看 pdf,但它在一个单独的窗口中打开,这不是我的要求。

4

3 回答 3

0

您的帮助窗口是否可能只是被父级上的其他控件隐藏Form?也许 aPanel有 aDockStyleFill?我不相信BringToFront()会覆盖 parent 的前台控件Form

从给定的信息来看,您的 PDF 查看表单的代码似乎很好,这取决于您所说的“我无法在我的子窗口中查看 pdf”的意思。

无论如何,您可以执行以下操作来查看您的子窗口是否被隐藏:

private void helpToolStripMenuItem_Click(object sender, EventArgs e)
{
     foreach (Control ctrl in this.Controls)
     {
          if (!(ctrl is MdiClient))
              ctrl.Hide();                                 
     }

     Help helpWindow=new Help();
     helpWindow.MdiParent = this;
     helpWindow.FormClosing += helpWindow_FormClosing;
     helpWindow.BringToFront();
     helpWindow.Show(); 
}

private void helpWindow_FormClosing(object sender, FormClosingEventArgs e)
{
    foreach (Control ctrl in this.Controls)
    {
        ctrl.Show();
    }
}
于 2014-03-12T15:26:07.317 回答
0

我找到了解决您问题的方法,因为我一直在尝试解决相同的问题。诀窍是创建一个专门用于在 acrobat 查看器中显示 pdf 文件的表单,然后将该表单添加到 MDI 子表单中。然后,当您要显示选定的 pdf 文件时,将文件名传递给子表单,然后将该文件名传递给添加到子表单的表单。因此,您将在子表单中为 pdf 表单声明一个类级别变量,如下所示:

    frmPDF pdfForm = new frmPDF();

在您的孩子中创建一个方法,该方法将接受 pdf 文件的名称,如下所示,同时创建 pdf 表单的实例并将其添加到 mdi 子表单:

    public void LoadPDF(string fileName)
    {
        pdfForm.TopLevel = false;
        pdfForm.Parent = this;
        pdfForm.FormBorderStyle = FormBorderStyle.None;
        pdfForm.Dock = DockStyle.Fill;
        pdfForm.Show();
        pdfForm.LoadPDF(fileName);
    }

然后,在您的 pdf 表单中创建以下方法,该方法将在显示表单后调用:

    public void LoadPDF(string fileName)
    {
        axAcroPDF1.LoadFile(@fileName);
    }

这应该可以解决您一直遇到的问题,并允许您在子窗口中显示帮助文件。

希望这可以帮助:-)

于 2018-01-14T23:11:26.277 回答
0

只是对我上一个答案的跟进,有两件事对于此解决方案的工作很重要:

  1. 用于表单的pdf表单必须添加为:

    TopLevel = false;
    
  2. 表单必须在pdfpdf 文件加载到 acrobat 控件之前完成加载。因此,如果子表单尚未加载并且正在一步加载,则仅当用于加载文件的代码在 form_shown 事件中时才会起作用。下面显示了上述解决方案的更好实现。

    private string _pdfFileName = "";
    public string PDFFileName { set { _pdfFileName = value; } }
    
    private void frmPDF_Shown(object sender, EventArgs e)
    {
        axAcroPDF1.LoadFile(_pdfFileName);
    }
    

然后应使用公共属性设置文件名,如下所示:

 pdfForm.PDFFileName=pdfFile;
于 2018-01-15T00:18:55.723 回答