winform 外接程序,Window 接口 求助,在线等。。。

mydear303 2010-06-22 04:56:17
Windows m_toolWindow = windows2.CreateToolWindow2(。。。。)方法(加载用户控件的),生成一个内置页(不是弹出一个form窗体)显示该用户控件,有个需求就是:当这个内置页关闭时我要做些数据库方面的操作,但我不知道哪个要触发哪个事件(或者需要写什么样的代码才可以),想了一个下午了,晚上要交货,问了两个同事一起想都没结果,哪个帮帮俺,还有几个小时了
...全文
139 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mydear303 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cja03 的回复:]
引用 11 楼 mydear303 的回复:

看看是不是类型弄错了:
是EnvDTE80.Events2而不是Events
是WindowVisibilityEvents而不是WindowEvents

另外,"Tab窗口"关闭,实际上是Hide,所以你需要……
[/Quote]
右键点击类文件时可以通过下面的方法获取该类的路径
SelectedItem item=_applicationObject.SelectedItems.Item(1);
item.ProjectItem.get_FileNames(1);//或获得全路径

但是:右键点击右边的文件夹时,用上面的方法获取不到
不知道大侠有没有做过类似的开发?要什么做或者有什么思路没有?谢谢
mydear303 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cja03 的回复:]
引用 11 楼 mydear303 的回复:
10楼,我相信是对的,只是我运行不出,不知道是哪里错了,我再理理,谢谢!!!


也感谢大家的帮助,明天抽空再结贴


看看是不是类型弄错了:
是EnvDTE80.Events2而不是Events
是WindowVisibilityEvents而不是WindowEvents

另外,"Tab窗口"关闭,实际上是Hide,所以你需要……
[/Quote]

非常感谢!刚刚去做别的模块一直没理,累了,先下班回家
再次感谢所有进来的朋友!!!!!
cja03 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 mydear303 的回复:]
10楼,我相信是对的,只是我运行不出,不知道是哪里错了,我再理理,谢谢!!!


也感谢大家的帮助,明天抽空再结贴
[/Quote]

看看是不是类型弄错了:
是EnvDTE80.Events2而不是Events
是WindowVisibilityEvents而不是WindowEvents

另外,"Tab窗口"关闭,实际上是Hide,所以你需要在 winEvents_WindowHiding 时 -=事件 并 销毁窗口
yilaozhuang 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lantingxiaosheng 的回复:]
你可以这样做,在主窗体中放置一个tableControl,让其没有tablepage,在需要的时动态添加,然后实例化你的form,让form的父窗体设置为你动态添加的tablepage,show出来就好了。
[/Quote]
应该是这个方法
mydear303 2010-06-22
  • 打赏
  • 举报
回复
10楼,我相信是对的,只是我运行不出,不知道是哪里错了,我再理理,谢谢!!!


也感谢大家的帮助,明天抽空再结贴
cja03 2010-06-22
  • 打赏
  • 举报
回复

public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
{
handled = false;
if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if (commandName == "MyAddin1.Connect.MyAddin1")
{
handled = true;

object obj = null;
Windows2 windows2 = _applicationObject.Windows as Windows2;
string assemblyPath = @"C:\Users\****\Desktop\MyAddin1\MyAddin1\bin\Debug\WindowsFormsControlLibrary1.dll";
obj = null;
Window window = windows2.CreateToolWindow2(_addInInstance, assemblyPath, "WindowsFormsControlLibrary1.UserControl1", "test", "{7EC14943-8160-4be9-9103-67D9B381AFD4}", ref obj);

EnvDTE80.Events2 events = (EnvDTE80.Events2)_applicationObject.Events;
WindowVisibilityEvents winEvents = events.get_WindowVisibilityEvents(window);
winEvents.WindowHiding += new _dispWindowVisibilityEvents_WindowHidingEventHandler(winEvents_WindowHiding);

window.IsFloating = false;
window.Linkable = false;
window.Visible = true;

return;
}
}
}

void winEvents_WindowHiding(Window Window)
{
if (!Window.Visible)
return;

System.Windows.Forms.MessageBox.Show(Window.Caption + " is closing");
}
lantingxiaosheng 2010-06-22
  • 打赏
  • 举报
回复
你可以这样做,在主窗体中放置一个tableControl,让其没有tablepage,在需要的时动态添加,然后实例化你的form,让form的父窗体设置为你动态添加的tablepage,show出来就好了。
cja03 2010-06-22
  • 打赏
  • 举报
回复
不知道是不是这个:

WindowEventsClass even = new WindowEventsClass();
even.WindowClosing+=

把even赋给window

mydear303 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kevin_cheung 的回复:]
你的意思是就象IE上新建一个页就多生成一个TAB一样

那这个关闭是怎么关闭

应该是要触发一个事件去让当前TAB消失

就重写下这个事件就可以了
[/Quote]

你理解到我要做的了,很感谢!
这个“TAB页”是CreateToolWindow2方法生成的(反正一个window对象),
思路我倒是想到和你一致,问题是本人小菜一个,找了一个下午也没重写成功,不知道如何下手
实在现在太急了,哎。。。。
mdmzl 2010-06-22
  • 打赏
  • 举报
回复
帮顶,,路过!!
LovingAlison 2010-06-22
  • 打赏
  • 举报
回复
你的意思是就象IE上新建一个页就多生成一个TAB一样

那这个关闭是怎么关闭

应该是要触发一个事件去让当前TAB消失

就重写下这个事件就可以了
mydear303 2010-06-22
  • 打赏
  • 举报
回复
有做过的朋友教教俺,到九点做不出来,明天就给批了。。。。。。。
mydear303 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kevin_cheung 的回复:]
生成一个内置页(不是弹出一个form窗体)显示该用户控件

这句在这个问题上很关键,可以详细说明下不
[/Quote]

在VS环境下,你随便打开一个类(或者一个form窗体),在编辑区不是会新建一个选项卡吗?一个选项卡就是我说的一个“内置页”
用windows2.CreateToolWindow2(。。。。),只要设置好Linkable \IsFloating 等就不会弹出来了,代码小段如下:

Windows2 windows2 = m_dte.Windows as Windows2;
Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();

// create the tool window
m_toolWindow = windows2.CreateToolWindow2(
m_addInInstance,
asm.Location,
"MyAddin1.UCBrower",//
strCtrlC,
"{7EC14943-8160-4be9-9103-67D9B381AFD4}",
ref obj);

UCBrower ddd = obj as UCBrower;//用户控件
ddd.StrInfo = "ddddddddddddddddddddddddddddd";

m_toolWindow.Linkable = false;
m_toolWindow.IsFloating = false;
m_toolWindow.Visible = true;
LovingAlison 2010-06-22
  • 打赏
  • 举报
回复
你没在守这个帖子?看到后尽快回答
LovingAlison 2010-06-22
  • 打赏
  • 举报
回复
生成一个内置页(不是弹出一个form窗体)显示该用户控件

这句在这个问题上很关键,可以详细说明下不

110,534

社区成员

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

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

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