Tworzenie strony opcji
Ten przewodnik tworzy prostą stronę Narzędzia/Opcje, która używa siatki właściwości do sprawdzania i ustawiania właściwości.
Aby zapisać te właściwości i przywrócić je z pliku ustawień, wykonaj następujące kroki, a następnie zobacz Tworzenie kategorii ustawień.
Program MPF udostępnia dwie klasy ułatwiające tworzenie stron Opcje narzędzi, klasę Package i klasę DialogPage . Pakiet VSPackage tworzy się w celu udostępnienia kontenera dla tych stron przez podklasę Package
klasy. Każdą stronę opcji narzędzi można utworzyć, wyprowadzając z DialogPage
klasy .
Strona siatki Tworzenie opcji narzędzi
W tej sekcji utworzysz prostą siatkę właściwości Narzędzia Opcje. Ta siatka służy do wyświetlania i zmieniania wartości właściwości.
Aby utworzyć projekt VSIX i dodać pakiet VSPackage
Każde rozszerzenie programu Visual Studio rozpoczyna się od projektu wdrażania VSIX, który będzie zawierać zasoby rozszerzenia. Utwórz projekt VSIX programu Visual Studio o nazwie
MyToolsOptionsExtension
. Szablon projektu VSIX można znaleźć w oknie dialogowym Nowy projekt , wyszukując frazę "vsix".Dodaj pakiet VSPackage, dodając szablon elementu pakietu programu Visual Studio o nazwie
MyToolsOptionsPackage
. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł projektu i wybierz polecenie Dodaj>nowy element. W oknie dialogowym Dodawanie nowego elementu przejdź do pozycji Rozszerzalność elementów>visual C#, a następnie wybierz pozycję Pakiet programu Visual Studio. W polu Nazwa w dolnej części okna dialogowego zmień nazwę pliku naMyToolsOptionsPackage.cs
. Aby uzyskać więcej informacji na temat tworzenia pakietu VSPackage, zobacz Create an extension with a VSPackage (Tworzenie rozszerzenia za pomocą pakietu VSPackage).
Aby utworzyć siatkę właściwości Narzędzia Opcje
Otwórz plik MyToolsOptionsPackage w edytorze kodu.
Dodaj następującą instrukcję using.
using System.ComponentModel;
Zadeklaruj klasę
OptionPageGrid
i utwórz ją z DialogPageklasy .public class OptionPageGrid : DialogPage { }
Zastosuj element ProvideOptionPageAttribute do klasy,
VSPackage
aby przypisać do klasy kategorię opcji i nazwę strony opcji dla opcjiGrid. Wynik powinien wyglądać następująco:[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] [ProvideMenuResource("Menus.ctmenu", 1)] [Guid(GuidList.guidMyToolsOptionsPkgString)] [ProvideOptionPage(typeof(OptionPageGrid), "My Category", "My Grid Page", 0, 0, true)] public sealed class MyToolsOptionsPackage : Package
OptionInteger
Dodaj właściwość doOptionPageGrid
klasy.Zastosuj element , System.ComponentModel.CategoryAttribute aby przypisać do właściwości kategorię siatki właściwości.
Zastosuj element , System.ComponentModel.DisplayNameAttribute aby przypisać do właściwości nazwę.
Zastosuj element , System.ComponentModel.DescriptionAttribute aby przypisać do właściwości opis.
public class OptionPageGrid : DialogPage { private int optionInt = 256; [Category("My Category")] [DisplayName("My Integer Option")] [Description("My integer option")] public int OptionInteger { get { return optionInt; } set { optionInt = value; } } }
Uwaga
Domyślna implementacja DialogPage programu obsługuje właściwości, które mają odpowiednie konwertery lub są strukturami lub tablicami, które można rozszerzyć na właściwości, które mają odpowiednie konwertery. Aby uzyskać listę konwerterów, zobacz System.ComponentModel przestrzeń nazw.
Skompiluj projekt i rozpocznij debugowanie.
W eksperymentalnym wystąpieniu programu Visual Studio w menu Narzędzia kliknij pozycję Opcje.
W okienku po lewej stronie powinna zostać wyświetlona pozycja Moja kategoria. (Kategorie opcji są wymienione w kolejności alfabetycznej, więc powinno się pojawić w połowie listy). Otwórz pozycję Moja kategoria , a następnie kliknij pozycję Moja strona siatki. Siatka opcji zostanie wyświetlona w okienku po prawej stronie. Kategoria właściwości to Moje opcje, a nazwa właściwości to Moja liczba całkowita. Opis właściwości, opcja Moja liczba całkowita, jest wyświetlana w dolnej części okienka. Zmień wartość z początkowej wartości 256 na inną. Kliknij przycisk OK, a następnie otwórz ponownie moją stronę siatki. Widać, że nowa wartość będzie się powtarzać.
Strona opcji jest również dostępna za pośrednictwem pola wyszukiwania programu Visual Studio. W polu wyszukiwania w górnej części środowiska IDE wpisz My Category (Moja kategoria ), a w wynikach zostanie wyświetlona strona Moja kategoria —> Moja siatka .
Tworzenie strony niestandardowej Opcje narzędzi
W tej sekcji utworzysz stronę Opcje narzędzi z niestandardowym interfejsem użytkownika. Ta strona służy do wyświetlania i zmieniania wartości właściwości.
Otwórz plik MyToolsOptionsPackage w edytorze kodu.
Dodaj następującą instrukcję using.
using System.Windows.Forms;
Dodaj klasę
OptionPageCustom
tuż przed klasąOptionPageGrid
. Utwórz nową klasę na podstawieDialogPage
klasy .public class OptionPageCustom : DialogPage { private string optionValue = "alpha"; public string OptionString { get { return optionValue; } set { optionValue = value; } } }
Dodaj atrybut GUID. Dodaj właściwość OptionString:
[Guid("00000000-0000-0000-0000-000000000000")] public class OptionPageCustom : DialogPage { private string optionValue = "alpha"; public string OptionString { get { return optionValue; } set { optionValue = value; } } }
Zastosuj sekundę ProvideOptionPageAttribute do klasy VSPackage. Ten atrybut przypisuje klasie kategorię opcji i nazwę strony opcji.
[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] [ProvideMenuResource("Menus.ctmenu", 1)] [Guid(GuidList.guidMyToolsOptionsPkgString)] [ProvideOptionPage(typeof(OptionPageGrid), "My Category", "My Grid Page", 0, 0, true)] [ProvideOptionPage(typeof(OptionPageCustom), "My Category", "My Custom Page", 0, 0, true)] public sealed class MyToolsOptionsPackage : Package
Dodaj nową kontrolkę użytkownika o nazwie MyUserControl do projektu.
Dodaj kontrolkę TextBox do kontrolki użytkownika.
W oknie Właściwości na pasku narzędzi kliknij przycisk Zdarzenia, a następnie kliknij dwukrotnie zdarzenie Leave. Nowa procedura obsługi zdarzeń jest wyświetlana w kodzie MyUserControl.cs .
Dodaj pole publiczne
OptionsPage
, metodęInitialize
do klasy kontrolnej i zaktualizuj program obsługi zdarzeń, aby ustawić wartość opcji na zawartość pola tekstowego:public partial class MyUserControl : UserControl { public MyUserControl() { InitializeComponent(); } internal OptionPageCustom optionsPage; public void Initialize() { textBox1.Text = optionsPage.OptionString; } private void textBox1_Leave(object sender, EventArgs e) { optionsPage.OptionString = textBox1.Text; } }
Pole
optionsPage
zawiera odwołanie do wystąpienia nadrzędnegoOptionPageCustom
. Metoda jest wyświetlanaInitialize
OptionString
w polu tekstowym. Program obsługi zdarzeń zapisuje bieżącą wartość kontrolki TextBox ,OptionString
gdy fokus opuszcza pole tekstowe.W pliku kodu pakietu dodaj zastąpienie właściwości
OptionPageCustom.Window
doOptionPageCustom
klasy w celu utworzenia, zainicjowania i zwrócenia wystąpienia klasyMyUserControl
. Klasa powinna teraz wyglądać następująco:[Guid("00000000-0000-0000-0000-000000000000")] public class OptionPageCustom : DialogPage { private string optionValue = "alpha"; public string OptionString { get { return optionValue; } set { optionValue = value; } } protected override IWin32Window Window { get { MyUserControl page = new MyUserControl(); page.optionsPage = this; page.Initialize(); return page; } } }
Skompiluj i uruchom projekt.
W wystąpieniu eksperymentalnym kliknij pozycję Narzędzia>Opcje.
Znajdź moją kategorię, a następnie pozycję Moja strona niestandardowa.
Zmień wartość opcjiString. Kliknij przycisk OK, a następnie otwórz ponownie moją stronę niestandardową. Widać, że nowa wartość została utrwalone.
Opcje dostępu
W tej sekcji uzyskasz wartość opcji z pakietu VSPackage, który hostuje skojarzona strona Opcje narzędzi. Tej samej techniki można użyć do uzyskania wartości dowolnej właściwości publicznej.
W pliku kodu pakietu dodaj właściwość publiczną o nazwie OptionInteger do klasy MyToolsOptionsPackage .
public int OptionInteger { get { OptionPageGrid page = (OptionPageGrid)GetDialogPage(typeof(OptionPageGrid)); return page.OptionInteger; } }
Ten kod wywołuje metodę GetDialogPage tworzenia lub pobierania
OptionPageGrid
wystąpienia.OptionPageGrid
wywołania LoadSettingsFromStorage w celu załadowania jego opcji, które są właściwościami publicznymi.Teraz dodaj niestandardowy szablon elementu polecenia o nazwie MyToolsOptionsCommand , aby wyświetlić wartość. W oknie dialogowym Dodawanie nowego elementu przejdź do pozycji Visual C#>Rozszerzalność i wybierz pozycję Polecenie niestandardowe. W polu Nazwa w dolnej części okna zmień nazwę pliku polecenia na MyToolsOptionsCommand.cs.
W pliku MyToolsOptionsCommand zastąp treść metody polecenia
ShowMessageBox
następującym kodem:private void ShowMessageBox(object sender, EventArgs e) { MyToolsOptionsPackage myToolsOptionsPackage = this.package as MyToolsOptionsPackage; System.Windows.Forms.MessageBox.Show(string.Format(CultureInfo.CurrentCulture, "OptionInteger: {0}", myToolsOptionsPackage.OptionInteger)); }
Skompiluj projekt i rozpocznij debugowanie.
W wystąpieniu eksperymentalnym w menu Narzędzia kliknij pozycję Wywołaj myToolsOptionsCommand.
W polu komunikatu jest wyświetlana bieżąca wartość
OptionInteger
.
Otwórz stronę opcji
W tej sekcji dodasz polecenie i zdarzenie dla przycisku, aby otworzyć stronę opcji
Najpierw dodaj plik o nazwie OpenPageCommand.cs.
Następnie otwórz plik OpenPageCommand.cs i zmień metodę Execute.
private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); Type optionsPageType = typeof(OptionPageCustom); Instance.package.ShowOptionPage(optionsPageType); }
Uruchom projekt, a następnie kliknij przycisk Wywołaj (domyślnie znajduje się w obszarze Narzędzia), a następnie zobaczysz, że strona opcji jest otwarta.
Więcej szczegółów na temat otwierania strony opcji można znaleźć w następujących dokumentach