Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando si crea una finestra di dialogo modale all'interno di Visual Studio, è necessario assicurarsi che la finestra padre della finestra di dialogo sia disabilitata mentre viene visualizzata la finestra di dialogo, quindi riabilitare la finestra padre dopo la chiusura della finestra di dialogo. In caso contrario, è possibile che venga visualizzato l'errore: Microsoft Visual Studio non può essere arrestato perché è attiva una finestra di dialogo modale. Chiudere la finestra di dialogo attiva e riprovare.
Esistono due modi per eseguire questa operazione. Il modo consigliato, se si dispone di una finestra di dialogo WPF, consiste nel derivarlo da DialogWindowe quindi chiamare ShowModal per visualizzare la finestra di dialogo. In questo caso, non è necessario gestire lo stato modale della finestra padre.
Se la finestra di dialogo non è WPF o per altri motivi non è possibile derivare la classe della finestra di dialogo da DialogWindow, è necessario ottenere l'elemento padre della finestra di dialogo chiamando GetDialogOwnerHwnd e gestire manualmente lo stato modale chiamando il EnableModeless metodo con un parametro 0 (false) prima di visualizzare la finestra di dialogo e chiamare di nuovo il metodo con un parametro 1 (true) dopo aver chiuso la finestra di dialogo.
Creare una finestra di dialogo derivata da DialogWindow
Creare un progetto VSIX denominato OpenDialogTest e aggiungere un comando di menu denominato OpenDialog. Per altre informazioni su come eseguire questa operazione, vedere Creare un'estensione con un comando di menu.
Per usare la DialogWindow classe , è necessario aggiungere riferimenti agli assembly seguenti (nella scheda Framework della finestra di dialogo Aggiungi riferimento ):
PresentationCore
PresentationFramework
WindowsBase
System.Xaml
In OpenDialog.cs aggiungere l'istruzione seguente
using
:using Microsoft.VisualStudio.PlatformUI;
Dichiarare una classe denominata
TestDialogWindow
che deriva da DialogWindow:class TestDialogWindow : DialogWindow {. . .}
Per ridurre al minimo e ingrandire la finestra di dialogo, impostare e HasMinimizeButton impostare HasMaximizeButton su true:
internal TestDialogWindow() { this.HasMaximizeButton = true; this.HasMinimizeButton = true; }
OpenDialog.ShowMessageBox
Nel metodo sostituire il codice esistente con il codice seguente:TestDialogWindow testDialog = new TestDialogWindow(); testDialog.ShowModal();
Compilare ed eseguire l'applicazione. Verrà visualizzata l'istanza sperimentale di Visual Studio. Nel menu Strumenti dell'istanza sperimentale dovrebbe essere visualizzato un comando denominato Invoke OpenDialog. Quando si fa clic su questo comando, verrà visualizzata la finestra di dialogo. Dovrebbe essere possibile ridurre al minimo e ingrandire la finestra.
Creare e gestire una finestra di dialogo non derivata da DialogWindow
Per questa procedura, è possibile usare la soluzione OpenDialogTest creata nella procedura precedente, con gli stessi riferimenti all'assembly.
Aggiungere le dichiarazioni seguenti
using
:using System.Windows; using Microsoft.Internal.VisualStudio.PlatformUI;
Creare una classe denominata
TestDialogWindow2
che deriva da Window:class TestDialogWindow2 : Window {. . .}
Aggiungere un riferimento privato a IVsUIShell:
private IVsUIShell shell;
Aggiungere un costruttore che imposta il riferimento a IVsUIShell:
public TestDialogWindow2(IVsUIShell uiShell) { shell = uiShell; }
OpenDialog.ShowMessageBox
Nel metodo sostituire il codice esistente con il codice seguente:IVsUIShell uiShell = (IVsUIShell)ServiceProvider.GetService(typeof(SVsUIShell)); TestDialogWindow2 testDialog2 = new TestDialogWindow2(uiShell); //get the owner of this dialog IntPtr hwnd; uiShell.GetDialogOwnerHwnd(out hwnd); testDialog2.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; uiShell.EnableModeless(0); try { WindowHelper.ShowModal(testDialog2, hwnd); } finally { // This will take place after the window is closed. uiShell.EnableModeless(1); }
Compilare ed eseguire l'applicazione. Nel menu Strumenti dovrebbe essere visualizzato un comando denominato Invoke OpenDialog. Quando si fa clic su questo comando, verrà visualizzata la finestra di dialogo.