Obsługa czasu projektowania programu Visual Studio dla kontrolek niestandardowych (platforma .NET systemu Windows Form)
Jak zauważyłeś podczas interakcji z projektantem systemu Windows Form, istnieje wiele różnych funkcji czasu projektowania oferowanych przez kontrolki systemu Windows Form. Niektóre funkcje oferowane przez program Visual Studio Projektant obejmują linie przyciągania, elementy akcji i siatkę właściwości. Wszystkie te funkcje oferują łatwiejszy sposób interakcji i dostosowywania kontroli w czasie projektowania. Ten artykuł zawiera omówienie rodzaju obsługi, którą można dodać do kontrolek niestandardowych, aby usprawnić środowisko projektowania dla użytkowników kontrolek.
Ważne
Dokumentacja przewodnika dla komputerów dla platform .NET 7 i .NET 6 jest w budowie.
Czym różni się program .NET Framework
Wiele podstawowych elementów projektowych kontrolek niestandardowych pozostał taki sam z programu .NET Framework. Jeśli jednak używasz bardziej zaawansowanych funkcji dostosowywania projektanta, takich jak listy akcji, konwertery typów, niestandardowe okna dialogowe, masz kilka unikatowych scenariuszy do obsługi.
Program Visual Studio jest aplikacją opartą na programie .NET Framework, a w związku z tym program Visual Projektant widoczny dla systemu Windows Formjest również oparty na programie .NET Framework. W przypadku projektu .NET Framework zarówno środowisko programu Visual Studio, jak i aplikacja systemu Windows Formsą projektowane w ramach tego samego procesu, devenv.exe. Stanowi to problem podczas pracy z aplikacją .NET systemu Windows Form(a nie .NET Framework). Zarówno platforma .NET, jak i program .NET Framework nie mogą działać w ramach tego samego procesu. W związku z tym platforma .NET systemu Windows Formużywa innego projektanta , projektanta "poza procesem".
Projektant out-of-process jest procesem o nazwie DesignToolsServer.exe i jest uruchamiany wzdłuż procesu devenv.exe programu Visual Studio. Proces DesignToolsServer.exe działa w tej samej wersji i na tej samej platformie, takiej jak .NET 7 i x64, platformy .NET przeznaczonej dla twojej aplikacji. Gdy kontrolka niestandardowa musi wyświetlać interfejs użytkownika w devenv.exe kontrolka niestandardowa musi zaimplementować architekturę klient-serwer, aby ułatwić komunikację z devenv.exe i z niej. Aby uzyskać więcej informacji, zobacz Projektant zmienia się od .NET Framework (windows Forms .NET).
Okno właściwości
W oknie Właściwości programu Visual Studio są wyświetlane właściwości i zdarzenia dla wybranej kontrolki lub formularza. Jest to zazwyczaj pierwszy punkt dostosowywania, który wykonuje się w niestandardowej kontrolce lub składniku.
Na poniższej ilustracji przedstawiono kontrolkę wybraną Button
w wizualizacji Projektant i siatkę właściwości pokazującą właściwości przycisku:
W siatce właściwości możesz kontrolować niektóre aspekty wyświetlania informacji o kontrolce niestandardowej. Atrybuty są stosowane do niestandardowej klasy formantu lub właściwości klasy.
Atrybuty dla klas
W poniższej tabeli przedstawiono atrybuty, które można zastosować, aby określić zachowanie niestandardowych kontrolek i składników w czasie projektowania.
Atrybut | opis |
---|---|
DefaultEventAttribute | Określa zdarzenie domyślne składnika. |
DefaultPropertyAttribute | Określa właściwość domyślną składnika. |
DesignerAttribute | Określa klasę używaną do implementowania usług czasu projektowania dla składnika. |
DesignerCategoryAttribute | Określa, że projektant klasy należy do określonej kategorii. |
ToolboxItemAttribute | Reprezentuje atrybut elementu przybornika. |
ToolboxItemFilterAttribute | Określa ciąg filtru i typ filtru do użycia dla elementu Przybornik. |
Atrybuty właściwości
W poniższej tabeli przedstawiono atrybuty, które można zastosować do właściwości lub innych elementów członkowskich niestandardowych kontrolek i składników.
Atrybut | opis |
---|---|
AmbientValueAttribute | Określa wartość, która ma być przekazywana do właściwości, aby spowodować, że właściwość pobierze jej wartość z innego źródła. Jest to nazywane klimatem. |
BrowsableAttribute | Określa, czy właściwość lub zdarzenie powinny być wyświetlane w oknie Właściwości . |
CategoryAttribute | Określa nazwę kategorii, w której ma być zgrupowana właściwość lub zdarzenie w przypadku wyświetlania w kontrolce ustawionej PropertyGrid na Categorized tryb. |
DefaultValueAttribute | Określa wartość domyślną właściwości. |
DescriptionAttribute | Określa opis właściwości lub zdarzenia. |
DisplayNameAttribute | Określa nazwę wyświetlaną właściwości, zdarzenia lub metody publicznej, która nie zwraca wartości i nie przyjmuje żadnych argumentów. |
EditorAttribute | Określa edytor do zmiany właściwości. |
EditorBrowsableAttribute | Określa, że właściwość lub metoda jest widoczna w edytorze. |
HelpKeywordAttribute | Określa słowo kluczowe kontekstu dla klasy lub składowej. |
LocalizableAttribute | Określa, czy właściwość ma być zlokalizowana. |
PasswordPropertyTextAttribute | Wskazuje, że reprezentacja tekstu obiektu jest ukryta przez znaki, takie jak gwiazdki. |
ReadOnlyAttribute | Określa, czy właściwość ta atrybut jest powiązana z jest tylko do odczytu, czy tylko do odczytu/zapisu w czasie projektowania. |
RefreshPropertiesAttribute | Wskazuje, że siatka właściwości powinna zostać odświeżona po zmianie skojarzonej wartości właściwości. |
TypeConverterAttribute | Określa typ, który ma być używany jako konwerter dla obiektu, z jakim jest powiązany ten atrybut. |
Projektanci kontrolek niestandardowych
Środowisko projektowania kontrolek niestandardowych można zwiększyć, tworząc skojarzony projektant niestandardowy. Domyślnie kontrolka niestandardowa jest wyświetlana na powierzchni projektowej hosta i wygląda tak samo jak w czasie wykonywania. Za pomocą projektanta niestandardowego można ulepszyć widok czasu projektowania kontrolki, dodać elementy akcji, linie przyciągania i inne elementy, co może pomóc użytkownikowi w określeniu sposobu układania i konfigurowania kontrolki. Na przykład w czasie ToolStrip projektowania projektant dodaje dodatkowe kontrolki, które użytkownik może dodawać, usuwać i konfigurować poszczególne elementy, jak pokazano na poniższej ilustracji:
Możesz utworzyć własnych projektantów niestandardowych, wykonując następujące kroki:
- Dodawanie odwołania do pliku Microsoft.WinForms.Projektant. Pakiet NuGet zestawu SDK.
- Tworzenie typu dziedziczy z
Microsoft.DotNet.DesignTools.Designers.ControlDesigner
klasy . - W klasie kontrolki użytkownika oznacz klasę atrybutem System.ComponentModel.DesignerAttribute klasy, przekazując typ utworzony w poprzednim kroku.
Aby uzyskać więcej informacji, zobacz sekcję Co się różni od programu .NET Framework .
Elementy akcji
Projektant akcje to menu kontekstowe, które umożliwiają użytkownikowi szybkie wykonywanie typowych zadań. Jeśli na przykład dodasz element TabControl do formularza, dodasz i usuniesz karty do i z kontrolki. Karty są zarządzane w oknie Właściwości za pośrednictwem TabPages właściwości, która wyświetla edytor kolekcji kart. Zamiast wymuszać, aby użytkownik zawsze przesiewał listę Właściwości wyszukując TabPages
właściwość, TabControl
udostępnia przycisk tagu inteligentnego, który jest widoczny tylko po wybraniu kontrolki, jak pokazano na poniższych obrazach:
Po wybraniu tagu inteligentnego zostanie wyświetlona lista akcji:
Dodając akcje Dodaj kartę i Usuń kartę, projektant kontrolki sprawia, że umożliwia szybkie dodawanie lub usuwanie karty.
Tworzenie listy elementów akcji
Listy elementów akcji są dostarczane przez ControlDesigner
utworzony typ. Poniższe kroki to podstawowy przewodnik tworzenia własnej listy akcji:
- Dodawanie odwołania do pliku Microsoft.WinForms.Projektant. Pakiet NuGet zestawu SDK.
- Utwórz nową klasę listy akcji, która dziedziczy z klasy
Microsoft.DotNet.DesignTools.Designers.Actions.DesignerActionList
. - Dodaj właściwości do listy akcji, do której użytkownik ma uzyskać dostęp. Na przykład dodanie
bool
właściwości lubBoolean
(w Visual Basic) do klasy powoduje utworzenie CheckBox kontrolki na liście akcji. - Wykonaj kroki opisane w sekcji Niestandardowe projektanci kontrolek, aby utworzyć nowego projektanta.
- W klasie projektanta
ActionLists
przesłoń właściwość, która zwracaMicrosoft.DotNet.DesignTools.Designers.Actions.DesignerActionListCollection
typ. - Dodaj listę akcji do
DesignerActionListCollection
wystąpienia i zwróć ją.
Aby zapoznać się z przykładem listy akcji, zobacz repozytorium GitHub Projektant Dokumentów rozszerzalności i przykładów systemu WindowsForm, w szczególności TileRepeater.Designer.Server/ControlDesigner
folder.
Modalne edytory typów okien dialogowych
W oknie Właściwości większość właściwości jest łatwo edytowana w siatce, na przykład gdy typ kopii zapasowej właściwości jest wyliczeniem, wartością logiczną lub liczbą.
Czasami właściwość jest bardziej złożona i wymaga niestandardowego okna dialogowego, którego użytkownik może użyć do zmiany właściwości. Na przykład Font właściwość jest typem System.Drawing.Font , który zawiera wiele właściwości, które zmieniają wygląd czcionki. Nie jest to łatwe do przedstawienia w oknie Właściwości , więc ta właściwość używa niestandardowego okna dialogowego do edytowania czcionki:
Jeśli właściwości kontrolki niestandardowej korzystają z wbudowanych edytorów typów udostępnianych przez system Windows Form, możesz użyć EditorAttribute polecenia , aby oznaczyć właściwości odpowiednim edytorem .NET Framework, który ma być używany przez program Visual Studio. Korzystając z wbudowanych edytorów, należy unikać konieczności replikowania komunikacji klient-serwer-proxy dostarczonej przez projektanta poza procesem.
W przypadku odwoływania się do wbudowanego edytora typów użyj typu .NET Framework, a nie typu .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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla