Dan*_*ker 7 add-in visual-studio-addins docking visual-studio-2008 visual-studio
我为Visual Studio 2008编写了一个简单的加载项,用于打开可停靠的窗口窗格.
加载项的性质意味着理想情况下它将停靠在编辑源的位置旁边.但有时候,在某些安装中,它不会停留在停靠状态.你运行VS,你停靠我的窗格,你关闭VS,你重新启动VS,然后敲响它 - 窗格再次浮动.在某些机器上,我每次都要重新对接它.
但是在其他安装中,无论我将它永远放在哪里,它都会停靠.我原本以为它可能是Vista和XP之间的区别,但现在我有报道称它在XP上也没有出现.
从我读过的内容(以及它有时会停留的事实)我得到的印象是VS应该为我保存对接状态.但事实并非如此.而在同一VS安装上的其他插件没有这个问题.所以我必须做些什么才能改善这种状况.
我怀疑我的代码中唯一相关的部分是这样的:
public class Connect : IDTExtensibility2
{
private static DTE2 _applicationObject;
private AddIn _addInInstance;
private static CodeModelEvents _codeModelEvents;
public static DTE2 VisualStudioApplication
{
get { return _applicationObject; }
}
public static CodeModelEvents CodeModelEvents
{
get { return _codeModelEvents; }
}
public static event EventHandler SourceChanged = delegate { };
public void OnConnection(object application,
ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
}
public void OnStartupComplete(ref Array custom)
{
try
{
Events2 events = (Events2)_applicationObject.Events;
_codeModelEvents = events.get_CodeModelEvents(null);
object objTemp = null;
Windows2 toolWins = (Windows2)_applicationObject.Windows;
Window toolWin = toolWins.CreateToolWindow2(
_addInInstance, GetType().Assembly.Location, "Ora.OraPane", "Ora",
"{DC8A399C-D9B3-40f9-90E2-EAA16F0FBF94}", ref objTemp);
toolWin.Visible = true;
}
catch (Exception ex)
{
MessageBox.Show("Exception: " + ex.Message);
}
}
public void OnBeginShutdown(ref Array custom) { }
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) { }
public void OnAddInsUpdate(ref Array custom) { }
}
Run Code Online (Sandbox Code Playgroud)
(MSDN文档建议窗口应该在OnConnection中创建,但如果我这样做,那么窗口大多不会出现.)
我遇到了TeamReview(http://www.codeplex.com/TeamReview)的一些相同的对接问题.我不能说为什么会发生这种情况,但我可以帮助您指出始终在OnStartupComplete中记录您的窗口的代码.如果您有一个特定的位置,那么您可以在创建toolWin之后和调用Visible属性之前将其链接到框架内.您必须检查哪些常量符合CreateLinkedWindowFrame和SetKind方法的条件.此外,您可能希望将窗口链接到MainWindow以外的其他内容,例如SolutionExplorer
EnvDTE80.Window2 frame = toolWins.CreateLinkedWindowFrame(toolWin, toolWin, vsLinkedWindowType.vsLinkedWindowTypeTabbed);
frame.SetKind(EnvDTE.vsWindowType.vsWindowTypeToolWindow);
_applicationObject.MainWindow.LinkedWindows.Add(frame);
frame.Activate();
Run Code Online (Sandbox Code Playgroud)
此示例类似于:http://www.codeplex.com/TeamReview/SourceControl/changeset/view/16102#2008 - > TeamReview - > Command - > ShowReplayWindowCommand.cs - > ShowForm()
这是一个很好的Microsoft示例,用于将输出窗口,命令窗口和解决方案资源管理器链接在一起.然后它操纵这些链接窗口的宽度和高度,最后从链接的窗口框架中取消它们.
| 归档时间: |
|
| 查看次数: |
2738 次 |
| 最近记录: |