在JXTaskPaneJava中Swing的使用有一个标题栏.其中有一个扩展/收缩按钮.我希望能够在标题栏中添加我自己的操作,该标题栏将显示在展开/收缩按钮旁边.
我怎样才能做到这一点?我尝试了很多次,但没有得到预期的结果.我创建了一个新的JButton并将其位置设置在标题栏坐标上,但它已添加到元素中.
我附上了一个屏幕截图,在标题栏中显示了一个帮助类型操作,以显示我的意思.
我正在使用Visual Studio 2008中的VSTO开发Word 2007-2010插件.在我的插件中,我需要为每个打开的word文档创建一个自定义任务窗格.基本上,我需要为每个文档创建一个任务窗格,在文档窗口中显示正确的任务窗格,在文档关闭时执行某些操作,然后删除任务窗格及其所有引用.
这是我到目前为止所做的:
任务窗格创建
我为每个新的,打开的或现有的加载文档创建一个自定义任务窗格,如下所示:
((ApplicationEvents4_Event) Application).NewDocument += CreateTaskPaneWrapper;
Application.DocumentOpen += CreateTaskPaneWrapper;
foreach (Document document in Application.Documents)
{
CreateTaskPaneWrapper(document);
}
Run Code Online (Sandbox Code Playgroud)
在CreateTaskPaneWrapper方法中,如果文档的任务窗格已存在,则检查Dictionary <Document,TaskPaneWrapper>.我这样做是因为如果我尝试打开已打开的文档,则会触发open事件.如果它不存在,我创建一个新的TaskPaneWrapper类.在其构造函数中,我创建了一个新的任务窗格,并将其添加到CustomTaskPanes集合中
Globals.ThisAddIn.CustomTaskPanes.Add(taskPane, "Title");
Run Code Online (Sandbox Code Playgroud)
根据MSDN,这将任务窗格与当前活动窗口相关联.
任务窗格关闭
Document.Close和Application.DocumentBeforeClose事件都不适合我,因为它们在用户发出关闭文档的确认之前触发.所以我在TaskPaneWrapper类中使用Microsoft.Office.Tools.Word.Document.Shutdown事件,如下所示:
_vstoDocument = document.GetVstoObject();
_vstoDocument.Shutdown += OnShutdown;
private void OnShutdown(object sender, EventArgs eventArgs)
{
Globals.ThisAddIn.CustomTaskPanes.Remove(_taskPane);
//additional shutdown logic
}
Run Code Online (Sandbox Code Playgroud)
所有这些似乎都很好用,创建了任务窗格,绑定到相应的窗口,并成功删除.但是,我仍有一个问题 - 当我启动Word时,会打开一个空白文档.如果我然后打开现有文档而不更改空白文档,则删除空白文档及其窗口,而不会触发Document.Close,Application.DocumentBeforeClose和Microsoft.Office.Tools.Word.Document.Shutdown事件.因为未调用OnShutdown并且未删除空白文档的任务窗格,所以下一个文档窗口包含两个任务窗格 - 非常新的任务窗格,以及第一个(孤立的)任务窗格.如何删除此孤立的任务窗格?访问已删除的文档或窗口引用会抛出COMException("对象已被删除").我暂时使用这个黑客:
//A property in my TaskPaneWrapper class
public bool IsWindowAlive()
{
try
{
var window = _vstoDocument.ActiveWindow;
return true;
}
catch (COMException)
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
在CreateTaskPaneWrapper方法中,我检查此属性是否包含所有现有包装器,并关闭属性为false的那些包装器.当然,捕捉异常有点贵,而且这个解决方案非常糟糕,所以我想知道,有更好的解决方案吗? …
我已成功实现了Microsoft示例"演练:使用功能区按钮同步自定义任务窗格",如下所示:http: //msdn.microsoft.com/en-us/library/bb608590.aspx
最初我遇到了一个问题,任务窗格没有显示,结果是我的加载项和微软的"分析工具包"之间发生了一些冲突.禁用Analysis Toolpack后,自定义任务窗格开始按预期显示和隐藏.
然后,当用户按下按钮时,我编写了一些代码来更改所选范围内的单元格.这似乎工作得很好 - 直到我打开另一本工作簿!每个工作簿窗口都有自己的加载项功能区,但是当我单击切换按钮打开/关闭自定义任务窗格时,它只会打开/关闭创建的第一个窗口的自定义任务窗格.这与我单击切换按钮的窗口无关.
该代码在ThisAddIn_Startup中实例化CustomTaskPane对象(就像在示例代码中一样).我唯一添加的是UserControl中的按钮操作:
using xl = Microsoft.Office.Interop.Excel;
namespace SynchronizeTaskPaneAndRibbon
{
public partial class TaskPaneControl : UserControl
{
public TaskPaneControl()
{
InitializeComponent();
}
private void actionButton1_Click(object sender, EventArgs e)
{
xl.Range selection_rng = Globals.ThisAddIn.Application.Selection;
foreach (xl.Range cell in selection_rng.Cells)
{
if (cell.Value is string)
{
string v = cell.Value;
cell.Value = v + "*";
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码的其余部分就像在示例中一样.
有没有办法更改示例,以便它可以用于打开多个工作簿?我想要的是相同的加载项出现在每个工作簿窗口中,具有相同的功能区和相同的自定义窗格.当然,要将任何功能区操作(例如按下按钮)路由到出现在同一窗口中的自定义任务窗格.
阿尔,我被卡住了!
我正在编写一个Excel加载项,打开一个自定义任务窗格(它是一种数据分析工具类型的东西).为了提高工作效率,我希望用户能够将对象(例如文件或电子邮件附件)拖到该任务窗格的一部分上进行处理,而不必通过一个或多个文件对话框.
问题是Excel似乎完全覆盖了自定义任务窗格及其包含的控件的拖放属性,因此当我将文件拖放到任务窗格时,Excel只是尝试将其作为电子表格打开(如果它是受支持的文件类型),我的DragDrop事件永远不会触发.
有没有办法让Excel停止这样做,以便将drop事件发送到任务窗格?
我正在excel VSTO加载项中显示一个自定义任务窗格,正在构建它并显示为:
var ctrl = new CellTaskPane();
var pane = CustomTaskPanes.Add(ctrl, "Custom Sheet");
pane.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionRight;
pane.DockPositionRestrict = Office.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange;
pane.Visible = true;
Run Code Online (Sandbox Code Playgroud)
这是在ThisAddin.cs文件中完成的,并且在Debug会话下以及通过单击一次安装程序安装的加载项下,都可以在我的计算机上正常运行。
但是,将加载项安装到同事的机器上被证明很麻烦。
加载项正在运行,并且上下文菜单/功能区运行正常,但是窗格只是拒绝显示。
我在功能区上有一个切换按钮,可以切换Visible窗格上的属性,甚至单击也不会强制窗格显示。
任何帮助都将不胜感激,谷歌对此毫无用处。
谢谢。
我应该提一下,这CellTaskPane只是UserControlMSDN上的文档所规定的:http : //msdn.microsoft.com/en-us/library/aa942846.aspx
我正在制作一个具有CustomTaskPane的Excel加载项.在加载时,我尝试设置自定义任务窗格的dockposition,height和width.设置这些属性几乎立即在Excel2010上执行,但使用Excel2013几乎需要两秒钟.
我在MSDN上看到了一个关于此的问题,但没有给出真正的答案.其他人是否有这个问题,是否有工作场所?
我使用下面给出的代码在VB.Net for Outlook中创建了一个自定义任务窗格,我想在用户控件的标题(图像和按钮)中添加更多内容,而不仅仅是标题.有没有办法实现这个目标?
myUserControl1 = New OutlookTaskPane
myUserControl1.TabStop = True
Dim width As Integer = myUserControl1.Width
myCustomTaskPane = Me.CustomTaskPanes.Add(myUserControl1, "My Custom Task Pane")
myCustomTaskPane.Width = width
myCustomTaskPane.Visible = True
myCustomTaskPane.DockPositionRestrict = Microsoft.Office.Core.MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange
Run Code Online (Sandbox Code Playgroud)
请告诉我是否还有其他方法可以实现这一目标.谢谢.
我正在尝试创建一个简单的MS Word插件(主要是为了探索功能).插件添加了自定义任务窗格,并在功能区中添加了组.功能区控件包括一个用于控制自定义任务窗格可见性的复选框,以及一个用于打开文档的按钮.当我在MS Word中测试插件时,任务窗格正确显示,并且复选框正常工作.问题是,只要单击按钮并打开新文档,任务窗格就会隐藏,复选框不再控制任务窗格的可见性.出了什么问题?如何显示自定义任务窗格?
这是一个简单版本的插件:
public partial class ThisAddIn
{
private MyUserControl _myUserControl;
private CustomTaskPane _myCustomTastPane;
private OpenFileDialog _dialog;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
_dialog = new OpenFileDialog { Filter = "Doc File (*.rtf)|*.rtf", RestoreDirectory = true };
_myUserControl = new MyUserControl();
_myCustomTastPane = this.CustomTaskPanes.Add(_myUserControl, "My Task Pane");
_myCustomTastPane.Visible = true;
Globals.Ribbons.MyRibbon.ShowPane.Click += ShowClicked;
Globals.Ribbons.MyRibbon.LoadDoc.Click += LoadFile;
}
private void ShowClicked(object sender, RibbonControlEventArgs ribbonControlEventArgs)
{
_myCustomTastPane.Visible = Globals.Ribbons.MyRibbon.ShowPane.Checked;
}
void LoadFile(object sender, RibbonControlEventArgs e)
{
if (_dialog.ShowDialog() != DialogResult.OK) …Run Code Online (Sandbox Code Playgroud) 开发一个 Excel vsto 项目,我如何处理类中的自定义任务窗格,它是一个功能区控件。例如,当我单击功能区控件的按钮时,我想显示自定义任务窗格。
朵拉