Tag: 模式对话框

SDI:使模态表单应用最上层

在我用C#编写的VSTO外接程序中,我用form.ShowDialog();显示了一个模态窗体form.ShowDialog(); 。 此模式窗体的所有者是(在Excel 2013中)当前活动的工作簿窗口。 现在的问题:1)用Ctrl + N打开第二个工作簿2)显示模式窗体3)现在你可以通过使用Windows任务栏更改活动工作表 ! 结果:您无法在此工作簿窗口中执行任何操作。 问题:如何才能实现像标准MessageBox一样的行为? 我不会让我激活另一个窗口比它的父窗口。 PS:当然,我不想设置form.TopMost = true; 因为它不应该在其他应用程序之前。

如何处理Excel任务窗格中的用户控件,如模式对话框?

我在一个Excel加载项产品上工作,该产品包含一个具有多个用户控件的任务窗格。 我们已将login过程从模式用户窗体对话框移动到用户单击我们的loginfunction区button时显示在任务窗格内的Web浏览器控件。 期望的行为stream程将是: 用户单击function区上的loginbutton – login控件显示在任务窗格中 直到出现login结果(login成功,login失败或用户取消login), 用户将无法使用excel ,就好像正在显示模态login对话框 一旦login或login被取消,用户可以再次使用Excel。 换句话说,我希望任务窗格控件像一个modal dialog一样工作。 我有login控制工作很好,但我不知道有一种方法来模拟模态。 一旦用户点击loginbutton,他们可以自由地继续在Excel中工作,这是我们不想要的。 我一直在思考一些丑陋的解决scheme,比如试图阻止Excel中的每个窗口使用带有SendMessage的WM_SETREDRAW重新绘制,并绑定LockWindowUpdate,但是我真的希望有人会知道更好的方法来完成我正在尝试做的事情。 顺便说一下,这种types的function不仅将用于login控制,或者我们可能会继续,并将其放在modal dialog中。 我们也希望在我们允许用户继续使用Excel之前,让用户必须使用控件的其他两个控件也要这样做。