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.
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 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.
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 si basa anche su .NET Framework. Con un progetto .NET Framework, sia l'ambiente di Visual Studio che l'app Windows Form progettata vengono eseguiti nello stesso processo, devenv.exe. Questo pone un problema quando si lavora con un'app .NET per Windows Forms (non .NET Framework). .NET e .NET Framework non possono funzionare nello stesso processo. Di conseguenza, Windows Forms .NET utilizza un designer diverso, il designer "out-of-process".
Il progettista out-of-process è un processo denominato DesignToolsServer.exe, e viene eseguito insieme al processo devenv.exe di Visual Studio. Il processo DesignToolsServer.exe viene eseguito nella stessa versione e nella stessa piattaforma, ad esempio .NET 9 e x64, di .NET destinato all'app. Quando il controllo personalizzato deve visualizzare l'interfaccia utente in Visual Studio, il controllo personalizzato deve implementare un'architettura client-server per facilitare la comunicazione da e verso devenv.exe. Per ulteriori informazioni, vedere Le modifiche all'ambiente di progettazione introdotte da .NET Framework.
Finestra proprietà
Nella finestra proprietà di Visual Studio vengono visualizzate le proprietà e gli eventi per il controllo o il form selezionato. Si tratta in genere del primo punto di personalizzazione eseguito su un controllo o un componente personalizzato.
L'immagine seguente mostra un controllo Button
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 controlli e dei componenti 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 utilizzata per implementare servizi in fase di progettazione per un componente. |
DesignerCategoryAttribute | Specifica che il progettista di una classe appartiene a una determinata categoria. |
ToolboxItemAttribute | Rappresenta un attributo di un elemento della casella degli strumenti. |
ToolboxItemFilterAttribute | Specifica la stringa di filtro e il tipo di filtro da utilizzare 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 controlli e dei componenti personalizzati.
Attributo | Descrizione |
---|---|
AmbientValueAttribute | Specifica il valore da passare a una proprietà per fare in modo che la proprietà ottenga il relativo valore da un'altra origine. Questo è noto come ambiente . |
BrowsableAttribute | Specifica se una proprietà o un evento deve essere visualizzato in una finestra Proprietà. |
CategoryAttribute | Specifica il nome della categoria in cui raggruppare la proprietà o l'evento quando è visualizzato in un controllo PropertyGrid impostato in modalità Categorized. |
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 utilizzare per modificare una proprietà. |
EditorBrowsableAttribute | Specifica che una proprietà o un metodo è visualizzabile in un editor. |
HelpKeywordAttribute | Specifica la parola chiave "context" per una classe o un membro. |
LocalizableAttribute | Specifica se una proprietà deve essere localizzata. |
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 viene modificato il valore della proprietà associato. |
TypeConverterAttribute | Specifica il tipo da utilizzare come convertitore per l'oggetto a cui è associato questo attributo. |
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 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à cercando la proprietà TabPages
, il TabControl
fornisce 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 elenco di azioni, vedere il repository GitHub Windows Form Designer Extensibility Documents & Samples, 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 Form, è possibile usare EditorAttribute per contrassegnare le proprietà con l'editor .NET Framework corrispondente che si vuole usare visual Studio. Usando gli editor integrati, è possibile evitare il requisito di replicare la comunicazione client-server tramite oggetti proxy offerta dal progettista esterno al processo.
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