首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Visio绘图控件:关闭模式对话框后某些事件没有响应

Visio绘图控件:关闭模式对话框后某些事件没有响应
EN

Stack Overflow用户
提问于 2021-05-19 16:29:49
回答 1查看 62关注 0票数 0

我在主窗体中有两个形状。形状有一个上下文菜单项"dummy“,它链接到一个队列标记事件。它使用ShowDialog()打开一个模式表单。当我关闭它时,一些事件没有响应。右键单击不起作用。如果重复尝试,形状选择将起作用。鼠标移动工作正常。

我正在对模式表单执行Dispose()。下面是代码。我正在使用Visio 2019。但最新的visio订阅也会发生这种情况。我有一台x64机器。.net为4+

请帮我弄一下这个。

代码语言:javascript
运行
复制
using Visio = Microsoft.Office.Interop.Visio;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Dialog: Form
    {
        public Dialog()
        {
            InitializeComponent();
        }
    }


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            axDrawingControl1.Src = "";
            axDrawingControl1.Document.Application.MarkerEvent += Application_MarkerEvent;

            Visio.Shape shape = axDrawingControl1.Document.Application.ActivePage.DrawRectangle(0, 0, 1, 1);
            shape.AddSection((short)Visio.VisSectionIndices.visSectionAction);
            shape.AddRow((short)Visio.VisSectionIndices.visSectionAction, 0, (short)Visio.VisRowTags.visTagDefault);
            shape.CellsSRC[(short)Visio.VisSectionIndices.visSectionAction, 0, (short)Visio.VisCellIndices.visActionMenu].FormulaU = "\"Dummy\"";
            shape.CellsSRC[(short)Visio.VisSectionIndices.visSectionAction, 0, (short)Visio.VisCellIndices.visActionAction].FormulaU = $"QUEUEMARKEREVENT(\"abc\")";

            shape = axDrawingControl1.Document.Application.ActivePage.DrawOval(0, 0, 1, 1);
            shape.AddSection((short)Visio.VisSectionIndices.visSectionAction);
            shape.AddRow((short)Visio.VisSectionIndices.visSectionAction, 0, (short)Visio.VisRowTags.visTagDefault);
            shape.CellsSRC[(short)Visio.VisSectionIndices.visSectionAction, 0, (short)Visio.VisCellIndices.visActionMenu].FormulaU = "\"Dummy\"";
            shape.CellsSRC[(short)Visio.VisSectionIndices.visSectionAction, 0, (short)Visio.VisCellIndices.visActionAction].FormulaU = $"QUEUEMARKEREVENT(\"def\")";
        }

        private void Application_MarkerEvent(Visio.Application app, int SequenceNum, string ContextString)
        {
            Dialog dlg = null;
            dlg = new Dialog();
            dlg.ShowDialog();
            //I close form
            dlg.Dispose();
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-05-20 00:24:32

你不需要这样做

dlg.Dispose()

在这一点上,事实上这可能是导致问题的原因。当您在窗体上执行“确定”或“取消”时,将发生处置。在此之前,您仍然需要dlg对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67599574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档