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:
È 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:
È possibile creare finestre di progettazione personalizzate seguendo questa procedura:
- Aggiunta di riferimento al pacchetto NuGet Microsoft.WinForms.Designer.SDK.
- Creare un tipo eredita dalla
Microsoft.DotNet.DesignTools.Designers.ControlDesigner
classe . - 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:
Quando si seleziona lo smart tag, viene visualizzato l'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:
- Aggiunta di riferimento al pacchetto NuGet Microsoft.WinForms.Designer.SDK.
- Creare una nuova classe dell'elenco di azioni che eredita da
Microsoft.DotNet.DesignTools.Designers.Actions.DesignerActionList
. - Aggiungere le proprietà all'elenco di azioni a cui si vuole accedere l'utente. Ad esempio, l'aggiunta di una
bool
proprietà oBoolean
(in Visual Basic) alla classe crea un CheckBox controllo nell'elenco di azioni. - Seguire la procedura descritta nella sezione Finestre di progettazione controlli personalizzati per creare una nuova finestra di progettazione.
- Nella classe della finestra di progettazione eseguire l'override della
ActionLists
proprietà , che restituisce unMicrosoft.DotNet.DesignTools.Designers.Actions.DesignerActionListCollection
tipo. - 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 .
Editor dei tipi di dialogo modali
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.
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:
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
.NET Desktop feedback
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per