小编Too*_*ele的帖子

如何在Visio 2013加载项中添加自定义面板?

最近我写了一个outlook加载项,它有一个ribbon.xml文件,用于额外的功能区,上下文菜单等.我还添加了一个额外的面板停靠在我的窗口右侧.

现在我开始研究如何为Visio创建加载项.ribbon.xml实际上是相同的,所以这根本不是问题.但是,在打开Visio文档时,我似乎无法找到任何方法来添加自定义面板.

到目前为止,我在Visio中知道是否打开/创建/更改了文档:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    MessageBox.Show("Visio Add-In V1");
    Globals.ThisAddIn.Application.DocumentChanged += new Visio.EApplication_DocumentChangedEventHandler(docChanged);
    Globals.ThisAddIn.Application.DocumentOpened += new Visio.EApplication_DocumentOpenedEventHandler(docChanged);
    Globals.ThisAddIn.Application.DocumentCreated += new Visio.EApplication_DocumentCreatedEventHandler(docChanged);
}

private void docChanged(Visio.Document doc)
{
    MessageBox.Show("Document loaded");
}
Run Code Online (Sandbox Code Playgroud)

在outlook中我会这样做来添加一个自定义面板(简化):

MyPanel ctrl = new MyPanel();
Microsoft.Office.Tools.CustomTaskPane ctp = Globals.ThisAddIn.CustomTaskPanes.Add(ctrl, title);
ctp.Visible = true;
ctp.Width = 300;
ctp.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionRight;
Run Code Online (Sandbox Code Playgroud)

现在,我将如何在Visio 2013加载项中执行此操作?

编辑:

不幸的是,这让我认为这是不可能的:http: //msdn.microsoft.com/en-us/library/vstudio/bf08984t.aspx

EDIT2:

以下答案应该有效:Visio VSTO中是否有可用的任务窗格?

但是,我似乎找不到在主窗口上获得停靠面板的方法.这是我尝试过的:

Globals.ThisAddIn.Application.Windows.Add("testpanel", VisWindowStates.visWSDockedLeft, VisWinTypes.visStencilAddon, null, null, null, 300);
Run Code Online (Sandbox Code Playgroud)

这会将窗口添加为新图纸...

EDIT3:

Visio抛出一个COM异常,说我的窗口类型无效.

Application.Windows.Add("testpanel", VisWindowStates.visWSDockedRight, VisWinTypes.visAnchorBarAddon, null, …
Run Code Online (Sandbox Code Playgroud)

c# visio ms-office office-addins

5
推荐指数
1
解决办法
1788
查看次数

如何阻止 Paint 事件堆积

我正在创建一个应用程序来安排不同的任务。这些是通过在面板上绘制矩形来显示的。这必须是响应式的。所以我需要在每次尺寸变化时绘制和失效。当我达到规划面板的最大高度时,它会自动滚动。

问题是当我抓住滚动条并开始滚动一点时,当我释放滚动条时,我的整个应用程序和计算机都冻结了。

这很可能是由于 onpaint 事件在每个小滚动和堆积时被调用,让应用程序挂起直到它们全部完成。

现在我的问题是:我该如何解决这个问题?可能是通过防止多次调用paint事件,但是如何?

绘制事件调用的方法:

private void panelPlanning_Paint(object sender, PaintEventArgs e)
    {
        for (int i = 0; i < userList.Count; i++)
        {
            Label temp = new Label();
            temp.Text = userList[i].Text;
            temp.Width = panelUsers.Width;
            temp.Height = 50;
            temp.BorderStyle = BorderStyle.FixedSingle;
            temp.Location = new Point(0, i * 50);
            temp.TextAlign = ContentAlignment.MiddleCenter;
            panelUsers.Controls.Add(temp);

            foreach (FullTask task in taskList)
            {
                if (task.AssignedTo == userList[i].Text && task.StartDate != "" && task.DueDate != "")
                {
                    DateTime start = DateTime.ParseExact(task.StartDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    DateTime end = …
Run Code Online (Sandbox Code Playgroud)

c# scroll paint onpaint winforms

2
推荐指数
1
解决办法
1840
查看次数

标签 统计

c# ×2

ms-office ×1

office-addins ×1

onpaint ×1

paint ×1

scroll ×1

visio ×1

winforms ×1