Condividi tramite


Supporto della fase di progettazione di Visual Studio per controlli personalizzati (Windows Forms .NET)

Come si è notato durante l'interazione con la finestra di progettazione di Windows Form, esistono molte diverse funzionalità in fase di progettazione offerte dai controlli di Windows Form. Alcune delle funzionalità offerte da Visual Studio Designer includono linee di ancoraggio, elementi azione e griglia delle proprietà. Tutte queste funzionalità offrono un modo più semplice per interagire e personalizzare un controllo in fase di progettazione. Questo articolo offre una panoramica del tipo di supporto che è possibile aggiungere ai controlli personalizzati per migliorare l'esperienza in fase di progettazione per i consumer dei controlli.

Importante

La documentazione di Desktop Guide per .NET 7 e .NET 6 è in fase di costruzione.

Differenze rispetto a .NET Framework

Molti elementi di progettazione di base dei controlli personalizzati sono rimasti invariati da .NET Framework. Tuttavia, se si usano funzionalità di personalizzazione della finestra di progettazione più avanzate, ad esempio elenchi di azioni, convertitori di tipi, dialoghi personalizzati, sono disponibili alcuni scenari univoci da gestire.

Visual Studio è un'applicazione basata su .NET Framework e, di conseguenza, Visual Designer visualizzata per Windows Formè basato anche su .NET Framework. Con un progetto .NET Framework, sia l'ambiente di Visual Studio che l'app di Windows Formprogettati vengono eseguiti nello stesso processo, devenv.exe. Questo problema si verifica quando si usa un'app .NET di Windows Form(non .NET Framework). .NET e .NET Framework non possono funzionare nello stesso processo. Di conseguenza, Windows Forms .NET usa una finestra di progettazione diversa, la finestra di progettazione "out-of-process".

La finestra di progettazione out-of-process è un processo denominato DesignToolsServer.exe e viene eseguito lungo il processo di devenv.exe di Visual Studio. Il processo DesignToolsServer.exe viene eseguito nella stessa versione e nella stessa piattaforma, ad esempio .NET 7 e x64, di .NET destinato all'app. Quando il controllo personalizzato deve visualizzare l'interfaccia utente nel devenv.exe il controllo personalizzato deve implementare un'architettura client-server per facilitare la comunicazione da e verso devenv.exe. Per altre informazioni, vedere Modifiche della finestra di progettazione rispetto a .NET Framework (Windows Forms .NET).

Finestra proprietà

Nella finestra Proprietà di Visual Studio vengono visualizzate le proprietà e gli eventi per il controllo o il modulo selezionato. Si tratta in genere del primo punto di personalizzazione eseguito su un controllo o un componente personalizzato.

L'immagine seguente mostra un Button controllo selezionato in Progettazione visiva e la griglia delle proprietà che mostra le proprietà del pulsante:

Finestra di progettazione di Windows Formin Visual Studio che mostra un pulsante e la finestra delle proprietà

È possibile controllare alcuni aspetti della modalità di visualizzazione delle informazioni sul controllo personalizzato nella griglia delle proprietà. Gli attributi vengono applicati alla classe di controllo personalizzata o alle proprietà della classe.

Attributi per classi

La tabella seguente illustra gli attributi che è possibile applicare per specificare il comportamento dei componenti e dei controlli personalizzati in fase di progettazione.

Attributo Descrizione
DefaultEventAttribute Specifica l'evento predefinito per un componente.
DefaultPropertyAttribute Specifica la proprietà predefinita per un componente.
DesignerAttribute Specifica la classe usata per implementare i servizi in fase di progettazione per un componente.
DesignerCategoryAttribute Specifica che la finestra di progettazione di una classe appartiene a una determinata categoria.
ToolboxItemAttribute Rappresenta un attributo di un elemento della casella degli strumenti.
ToolboxItemFilterAttribute Specifica la stringa del filtro e il tipo di filtro da usare per un elemento della casella degli strumenti.

Attributi per le proprietà

La tabella seguente illustra gli attributi che è possibile applicare alle proprietà o ad altri membri dei componenti e dei controlli personalizzati.

Attributo Descrizione
AmbientValueAttribute Specifica il valore per passare a una proprietà che determini il proprio valore da un'altra origine. Questo concetto è noto come ambiente.
BrowsableAttribute Indica se visualizzare una proprietà o un evento in una finestra Proprietà.
CategoryAttribute Specifica il nome della categoria in cui raggruppare la proprietà o l'evento quando viene visualizzato in un PropertyGrid controllo impostato su Categorized modalità.
DefaultValueAttribute Specifica il valore predefinito per una proprietà.
DescriptionAttribute Specifica una descrizione per una proprietà o un evento.
DisplayNameAttribute Specifica il nome visualizzato per una proprietà, un evento o un metodo pubblico che non restituisce un valore e non accetta argomenti.
EditorAttribute Specifica l'editor da usare per modificare una proprietà.
EditorBrowsableAttribute Specifica che una proprietà o un metodo è visualizzabile in un editor.
HelpKeywordAttribute Specifica la parola chiave del contesto per una classe o un membro.
LocalizableAttribute Specifica se è necessario localizzare una proprietà.
PasswordPropertyTextAttribute Indica che la rappresentazione di testo di un oggetto è nascosta da caratteri quali asterischi.
ReadOnlyAttribute Specifica se la proprietà a cui è associato questo attributo è di sola lettura o di lettura/scrittura in fase di progettazione.
RefreshPropertiesAttribute Indica che la griglia delle proprietà deve essere aggiornata quando cambia il valore della proprietà associata.
TypeConverterAttribute Specifica il tipo da utilizzare come convertitore per l'oggetto a cui l'attributo è associato.

Finestre di progettazione controlli personalizzati

L'esperienza di progettazione per i controlli personalizzati può essere migliorata creando una finestra di progettazione personalizzata associata. Per impostazione predefinita, il controllo personalizzato viene visualizzato nell'area di progettazione dell'host e ha lo stesso aspetto durante la fase di esecuzione. Con una finestra di progettazione personalizzata è possibile migliorare la visualizzazione in fase di progettazione del controllo, aggiungere elementi di azione, linee di ancoraggio e altri elementi, che consentono all'utente di determinare come disporre e configurare il controllo. Ad esempio, in fase di progettazione la ToolStrip finestra di progettazione aggiunge controlli aggiuntivi per l'utente per aggiungere, rimuovere e configurare i singoli elementi, come illustrato nell'immagine seguente:

Finestra di progettazione di Windows Formin Visual Studio che mostra la visualizzazione della fase di progettazione di un contenitore diviso.

È possibile creare finestre di progettazione personalizzate seguendo questa procedura:

  1. Aggiunta di riferimento al pacchetto NuGet Microsoft.WinForms.Designer.SDK.
  2. Creare un tipo eredita dalla Microsoft.DotNet.DesignTools.Designers.ControlDesigner classe .
  3. Nella classe di controllo utente contrassegnare la classe con l'attributo System.ComponentModel.DesignerAttribute di classe , passando il tipo creato nel passaggio precedente.

Per altre informazioni, vedere la sezione Differenze rispetto a .NET Framework .

Attività

Le azioni della finestra di progettazione sono menu sensibili al contesto che consentono all'utente di eseguire rapidamente attività comuni. Ad esempio, se si aggiunge un oggetto TabControl a un modulo, si aggiungeranno e rimuoveranno le schede da e verso il controllo . Le schede vengono gestite nella finestra Proprietà , tramite la TabPages proprietà , che visualizza un editor di raccolte schede. Invece di forzare l'utente a esaminare sempre l'elenco Proprietà che cerca la TabPages proprietà, fornisce TabControl un pulsante smart tag visibile solo quando il controllo è selezionato, come illustrato nelle immagini seguenti:

Finestra di progettazione di Windows Formin Visual Studio che mostra il pulsante smart tag di un controllo struttura a schede.

Quando si seleziona lo smart tag, viene visualizzato l'elenco di azioni:

Finestra di progettazione di Windows Formin Visual Studio che mostra il pulsante smart tag di un controllo struttura a schede premuto, che visualizza un elenco di azioni.

Aggiungendo le azioni Aggiungi scheda e Rimuovi tabulazioni , la finestra di progettazione del controllo lo rende in modo da poter aggiungere o rimuovere rapidamente una scheda.

Creazione di un elenco di elementi di azione

Gli elenchi di elementi azione vengono forniti dal ControlDesigner tipo creato. I passaggi seguenti sono una guida di base per la creazione di un elenco di azioni personalizzato:

  1. Aggiunta di riferimento al pacchetto NuGet Microsoft.WinForms.Designer.SDK.
  2. Creare una nuova classe dell'elenco di azioni che eredita da Microsoft.DotNet.DesignTools.Designers.Actions.DesignerActionList.
  3. Aggiungere le proprietà all'elenco di azioni a cui si vuole accedere l'utente. Ad esempio, l'aggiunta di una bool proprietà o Boolean (in Visual Basic) alla classe crea un CheckBox controllo nell'elenco di azioni.
  4. Seguire la procedura descritta nella sezione Finestre di progettazione controlli personalizzati per creare una nuova finestra di progettazione.
  5. Nella classe della finestra di progettazione eseguire l'override della ActionLists proprietà , che restituisce un Microsoft.DotNet.DesignTools.Designers.Actions.DesignerActionListCollection tipo.
  6. Aggiungere l'elenco di azioni a un'istanza DesignerActionListCollection di e restituirlo.

Per un esempio di un elenco di azioni, vedi il repository GitHub Documenti ed esempi di Progettazione di WindowsForm, in particolare la TileRepeater.Designer.Server/ControlDesigner cartella .

Nella finestra Proprietà la maggior parte delle proprietà viene facilmente modificata nella griglia, ad esempio quando il tipo di supporto della proprietà è un'enumerazione, un valore booleano o un numero.

Visual Studio Finestra Proprietà per un'app di WindowsForm, che mostra la proprietà di allineamento.

In alcuni casi, una proprietà è più complessa e richiede un dialogo personalizzato che l'utente può usare per modificare la proprietà. Ad esempio, la Font proprietà è un tipo System.Drawing.Font , che contiene molte proprietà che modificano l'aspetto del tipo di carattere. Non è facilmente presente nella finestra Proprietà , quindi questa proprietà usa una finestra di dialogo personalizzata per modificare il tipo di carattere:

Finestra di dialogo Tipo di carattere di Visual Studio per un'app di Windows Form.

Se le proprietà del controllo personalizzato usano gli editor di tipi predefiniti forniti da Windows Forms, è possibile usare per EditorAttribute contrassegnare le proprietà con l'editor .NET Framework corrispondente che si vuole usare in Visual Studio. Usando gli editor predefiniti, è possibile evitare il requisito di replicare la comunicazione client-server proxy-object fornita dalla finestra di progettazione out-of-process.

Quando si fa riferimento a un editor di tipi predefinito, usare il tipo .NET Framework, non il tipo .NET:

[Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
        "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public string? Filename { get; set; }
<Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>
Public Property Filename As String