0

我的申请有两个表格

  • 1) 主要形式
  • 2) 仪表板表格

我在我的“仪表板表单”上使用了一个 qlickview ocx 控件,并用这个控件打开了我的 QVW 文件,一切正常......

但是,如果我打开的 QVW 文档在重新加载时遇到错误,或者换句话说,我的 OCX 控件遇到问题,当我尝试重新打开“仪表板表单”并打开 QVW 文件时,我的应用程序将挂起。

脚步:

  1. 打开应用程序
  2. 创建“仪表板表单”的实例并显示它
  3. 通过“仪表板表单”上的 OCX 控件打开 QVW 文档
  4. 火灾重装命令
  5. 重新加载时发生错误
  6. 关闭“仪表板表单”
  7. 创建“仪表板表单”的实例并显示它
  8. 尝试通过“仪表板表单”上的 OCX 控件打开一个 QVW 文档(上一个文档或另一个文档)
  9. 应用程序挂起

当我关闭仪表板表单时,我对先前的问题如何存在感到困惑,并且当我重用 ocx 控件时它会导致新的更大问题。

4

1 回答 1

0

当 OCX 和 web 失去焦点时,Qv 经常表现出奇怪的行为。

使用 OCX 时,我使用这个

/// <summary>
    /// Loading the QV document and a retry when we have missed contact with the qv document.
    /// </summary>
    private void LoadQvIfNecessary(bool forceDocumentReload =false)
    {
        Parent.Text = DateTime.Now.ToLongTimeString();
        if (forceDocumentReload)
            axQlikMainApp.DocName = null;
        if (axQlikMainApp.ActiveDocument == null)
            axQlikMainApp.DocName = Loader.Instance.Settings.QlikViewPlanningDocumentPath;
            Thread.Sleep(100);
        if (axQlikMainApp.ActiveDocument == null)
        {
            DialogResult result = Logger.ShowMessage("Du har tappat kontakten med databasen.\nVill du återuppta kontakten med databasen?\nOm du väljer ”Avbryt” stängs programmet ned.","Tappat kontakt",Logger.MessageLevel.CriticalError,MessageBoxButtons.RetryCancel);
            if (result == DialogResult.Cancel)
                Environment.Exit(0);
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(300);
                Application.DoEvents();
            }

            LoadQvIfNecessary();
        }
    }

这是一个丑陋的混蛋,但这确实有效。问题是您何时访问它。我使用表单焦点事件来检查这一点。

我还有一个用于重新加载文档的手动按钮。

于 2014-01-15T09:46:44.377 回答