gpt4 book ai didi

visual-studio - 为什么 Visual Studio 2008 会忘记我的加载项窗口 Pane 的停靠位置?

转载 作者:行者123 更新时间:2023-12-04 10:59:35 29 4
gpt4 key购买 nike

我为 Visual Studio 2008 编写了一个简单的加载项,可以打开一个可停靠的窗口 Pane 。

You can download the source and a binary installer by clicking here.

加载项的性质意味着它最好停靠在您编辑源的位置旁边。但有时,在某些安装中,它不会保持停靠。您运行 VS,停靠我的 Pane ,关闭 VS,重新启动 VS,然后让它挂起 - Pane 再次 float 。在某些机器上,我每次都必须重新对接它。

但是在其他安装中,它会永远停靠在我放置的任何地方。我最初认为这可能是 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) { }
}

(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();

此示例类似于: http://www.codeplex.com/TeamReview/SourceControl/changeset/view/16102# 2008 -> TeamReview -> 命令 -> ShowReplayWindowCommand.cs -> ShowForm()

这是 a good Microsoft example将输出窗口、命令窗口和解决方案资源管理器链接在一起。然后操作这些链接窗口的宽度和高度,并最终将它们从链接窗口框架中全部取消。

关于visual-studio - 为什么 Visual Studio 2008 会忘记我的加载项窗口 Pane 的停靠位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301577/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com