WORD 2007 外接程序菜单,调试正常,正常执行就无效?哭

fengyecsdn 2010-07-05 04:49:22
我做了一个给WORD添加手绘图片的插件。
调试的时候一切正常。
但是正常执行的时候就出现问题。



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Word = Microsoft.Office.Interop.Word;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Word;
using System.Windows.Forms;

namespace WordMyPic
{
public partial class ThisAddIn
{
private Office.CommandBarButton myControl;
private Office.CommandBarButton myControl2;
private Office.CommandBarButton myControl3;
private Office.CommandBarButton myControl4;
private Office.CommandBarButton myControl5;
private Office.CommandBarButton myControl6;
private Word.Application myApplication;

private void AddMenuItem()
{
Office.MsoControlType menuItem = Office.MsoControlType.msoControlButton;

Office.MsoControlType menuItem2 = Office.MsoControlType.msoControlButton;
Office.MsoControlType menuItem3 = Office.MsoControlType.msoControlButton;
Office.MsoControlType menuItem4 = Office.MsoControlType.msoControlButton;
Office.MsoControlType menuItem5 = Office.MsoControlType.msoControlButton;
Office.MsoControlType menuItem6 = Office.MsoControlType.msoControlButton;
string poo="";
for(int pp=1;pp<= myApplication.CommandBars.Count;pp++)
{
poo= myApplication.CommandBars[pp].Name +"\r\n"+ poo;
}

myControl =
(Office.CommandBarButton)myApplication.CommandBars["Text"].Controls.Add
(menuItem, missing, missing, 1, true);

myControl.Style = Office.MsoButtonStyle.msoButtonIconAndCaption;
myControl.Caption = "手绘签图.";

myControl.Tag = "MyMenuItem_WMP_Text";

myControl.Click += new Office._CommandBarButtonEvents_ClickEventHandler(myControl_Click);


myControl2 =
(Office.CommandBarButton)myApplication.CommandBars["Table Text"].Controls.Add
(menuItem2, missing, missing, 1, true);

myControl2.Style = Office.MsoButtonStyle.msoButtonIconAndCaption;
myControl2.Caption = "手绘签图,";

myControl2.Tag = "MyMenuItem_WMP_Table";

myControl2.Click += new Office._CommandBarButtonEvents_ClickEventHandler(myControl_Click);

myControl3 =
(Office.CommandBarButton)myApplication.CommandBars["Linked Text"].Controls.Add
(menuItem3, missing, missing, 1, true);

myControl3.Style = Office.MsoButtonStyle.msoButtonIconAndCaption;
myControl3.Caption = "手绘签图...";

myControl3.Tag = "MyMenuItem_WMP_Link";

myControl3.Click += new Office._CommandBarButtonEvents_ClickEventHandler(myControl_Click);


myControl4 =
(Office.CommandBarButton)myApplication.CommandBars["Header and Footer"].Controls.Add
(menuItem4, missing, missing, 1, true);

myControl4.Style = Office.MsoButtonStyle.msoButtonIconAndCaption;
myControl4.Caption = "手绘签图....";

myControl4.Tag = "MyMenuItem_WMP_HAF";

myControl4.Click += new Office._CommandBarButtonEvents_ClickEventHandler(myControl_Click);



GC.Collect();

}

void myControl_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)
{


IDataObject PID = Clipboard.GetDataObject();

System.Windows.Forms.MessageBox.Show("aa");
MyText MT = new MyText();
if ((myApplication.Selection.End - myApplication.Selection.Start) > 0)
{
myApplication.Selection.Range.CopyAsPicture();
MT.HasCopyPic = true;
}






// MT.PXZ = zzz;
if (System.Windows.Forms.DialogResult.OK == MT.ShowDialog())
{

try
{
if (MT.TransBG)
{
myApplication.Selection.InlineShapes.AddPicture(MT.TextBody, missing, missing, missing);
}
else
{
myApplication.Selection.Range.Paste();
}

}catch( Exception zzze)
{
System.Windows.Forms.MessageBox.Show(zzze.ToString());
}
}
MT.Dispose();



}
private bool RemoveMenuItem()
{
Office.CommandBar contextMenu = myApplication.CommandBars["Text"];
Office.CommandBar contextMenu2 = myApplication.CommandBars["Table Text"];
Office.CommandBar contextMenu3 = myApplication.CommandBars["Linked Text"];
Office.CommandBar contextMenu4 = myApplication.CommandBars["Header and Footer"];
Office.CommandBar contextMenu5 = myApplication.CommandBars["Floating Picture"];
Office.CommandBar contextMenu6 = myApplication.CommandBars["Inline Picture"];

bool zz = false;

Office.CommandBarButton control = (Office.CommandBarButton)contextMenu.FindControl(Office.MsoControlType.msoControlButton, missing, "MyMenuItem_WMP_Text", true, true);

Office.CommandBarButton control2 = (Office.CommandBarButton)contextMenu2.FindControl(Office.MsoControlType.msoControlButton, missing, "MyMenuItem_WMP_Table", true, true);

Office.CommandBarButton control3 = (Office.CommandBarButton)contextMenu3.FindControl(Office.MsoControlType.msoControlButton, missing, "MyMenuItem_WMP_Link", true, true);
Office.CommandBarButton control4 = (Office.CommandBarButton)contextMenu4.FindControl(Office.MsoControlType.msoControlButton, missing, "MyMenuItem_WMP_HAF", true, true);

Office.CommandBarButton control5 = (Office.CommandBarButton)contextMenu5.FindControl(Office.MsoControlType.msoControlButton, missing, "MyMenuItem_WMP_Picture", true, true);
Office.CommandBarButton control6 = (Office.CommandBarButton)contextMenu6.FindControl(Office.MsoControlType.msoControlButton, missing, "MyMenuItem_WMP_ILPicture", true, true);

if ((control != null))
{
control.Delete(true); zz = true;
}
if ((control2 != null))
{
control2.Delete(true); zz = true;
}
if ((control3 != null))
{
control3.Delete(true); zz = true;
}
if ((control4 != null))
{
control4.Delete(true); zz = true;
}
if ((control5 != null))
{
control5.Delete(true); zz = true;
}

if ((control6 != null))
{
control6.Delete(true); zz = true;
}
Office.CommandBarButton controlttt = (Office.CommandBarButton)contextMenu.FindControl(Office.MsoControlType.msoControlButton, missing, "MyMenuItem", true, true);
if ((controlttt != null))
{
controlttt.Delete(true);
}


return zz;
}
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
myApplication = Application;
for (int z = 0; z < 100; z++)
{
if (RemoveMenuItem() == false)
{
break;
}
}

AddMenuItem();
}

private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{

}

#region VSTO generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}

#endregion
}
}





以上代码 调试的时候正常。
我对WORD里的多种对象添加按钮。
最主要的是 TEXT 和 TABLE TEXT 两个
就是WORD光标处在文本位置 或者 表格里的时候 右键菜单
会出现 手绘签图字样。 TEXT的时候后边跟着一个英文的句点。 TABLE TEXT 里右键菜单 出现的是 手绘签图,后跟一个逗号。 表示这两个菜单的不同。

调试的时候任何位置都可以成功调用 对话框去绘图。

但是不在调试状态, 直接启动OFFICE WORD的时候 虽然在文本和 表格里 都能正常出现菜单。
但是只在文本处出现的菜单可以正常显示对话框。 而在表格里右键菜单 点击 后毫无反应。
我加了一个 MESSAGEBOX 表格里的菜单动作都无效,连MESSAGEBOX都不显示。

不知何解。求教大侠。
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyecsdn 2010-07-13
  • 打赏
  • 举报
回复
接分都没人抢啊
psyke99 2010-07-08
  • 打赏
  • 举报
回复
接分
fengyecsdn 2010-07-05
  • 打赏
  • 举报
回复
问题解决了 就当散粉了

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧