Udostępnij za pośrednictwem


Dodawanie ostatnio używanej listy do podmenu

Ten przewodnik opiera się na demonstracjach w temacie Dodawanie podmenu do menu i pokazuje, jak dodać listę dynamiczną do podmenu. Lista dynamiczna stanowi podstawę tworzenia listy ostatnio używanych (MRU).

Lista menu dynamicznego rozpoczyna się od symbolu zastępczego w menu. Za każdym razem, gdy menu jest wyświetlane, zintegrowane środowisko projektowe programu Visual Studio (IDE) pyta pakiet VSPackage o wszystkie polecenia, które powinny być wyświetlane w symbolu zastępczym. Lista dynamiczna może występować w dowolnym miejscu w menu. Jednak listy dynamiczne są zwykle przechowywane i wyświetlane samodzielnie w podmenu lub u dołu menu. Korzystając z tych wzorców projektowych, można włączyć dynamiczną listę poleceń, aby rozwinąć i zakontraktować bez wpływu na położenie innych poleceń w menu. W tym przewodniku dynamiczna lista MRU jest wyświetlana w dolnej części istniejącego podmenu oddzielona od pozostałej części podmenu przez wiersz.

Technicznie można również zastosować listę dynamiczną do paska narzędzi. Zniechęcimy jednak do tego użycia, ponieważ pasek narzędzi powinien pozostać niezmieniony, chyba że użytkownik podejmie określone kroki w celu jego zmiany.

Ten przewodnik tworzy listę mrU czterech elementów, które zmieniają kolejność za każdym razem, gdy wybrano jeden z nich (wybrany element przechodzi do góry listy).

Aby uzyskać więcej informacji na temat menu i plików vsct , zobacz Polecenia, menu i paski narzędzi.

Wymagania wstępne

Aby wykonać czynności opisane w tym przewodniku, należy zainstalować zestaw Visual Studio SDK. Aby uzyskać więcej informacji, zobacz Visual Studio SDK.

Tworzenie rozszerzenia

  • Postępuj zgodnie z procedurami w temacie Dodawanie podmenu do menu , aby utworzyć podmenu, który został zmodyfikowany w poniższych procedurach.

    W procedurach w tym przewodniku przyjęto założenie, że nazwa pakietu VSPackage to TestCommand, czyli nazwa używana w menu Dodaj menu na pasku menu programu Visual Studio.

Tworzenie dynamicznego polecenia listy elementów

  1. Otwórz plik TestCommandPackage.vsct.

  2. Symbols W sekcji w węźle GuidSymbol o nazwie guidTestCommandPackageCmdSet dodaj symbol grupy MRUListGroup i cmdidMRUList polecenia w następujący sposób.

    <IDSymbol name="MRUListGroup" value="0x1200"/>
    <IDSymbol name="cmdidMRUList" value="0x0200"/>
    
  3. Groups W sekcji dodaj zadeklarowaną grupę po istniejących wpisach grupy.

    <Group guid="guidTestCommandPackageCmdSet" id="MRUListGroup"
            priority="0x0100">
        <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/>
    </Group>
    
  4. Buttons W sekcji dodaj węzeł reprezentujący nowo zadeklarowane polecenie po istniejących wpisach przycisku.

    <Button guid="guidTestCommandPackageCmdSet" id="cmdidMRUList"
        type="Button" priority="0x0100">
        <Parent guid="guidTestCommandPackageCmdSet" id="MRUListGroup" />
        <CommandFlag>DynamicItemStart</CommandFlag>
        <Strings>
            <CommandName>cmdidMRUList</CommandName>
            <ButtonText>MRU Placeholder</ButtonText>
        </Strings>
    </Button>
    

    Flaga DynamicItemStart umożliwia dynamiczne generowanie polecenia.

  5. Skompiluj projekt i rozpocznij debugowanie, aby przetestować wyświetlanie nowego polecenia.

    W menu TestMenu kliknij nowy podmenu, Podmenu, aby wyświetlić nowe polecenie, symbol zastępczy MRU. Po zaimplementowaniu dynamicznej listy poleceń MRU w następnej procedurze ta etykieta polecenia zostanie zastąpiona tą listą za każdym razem, gdy podmenu zostanie otwarty.

Wypełnianie listy jednostek MRU

  1. W pliku TestCommandPackageGuids.cs dodaj następujące wiersze po istniejących identyfikatorach poleceń w TestCommandPackageGuids definicji klasy.

    public const string guidTestCommandPackageCmdSet = "00000000-0000-0000-0000-00000000"; // get the GUID from the .vsct file
    public const uint cmdidMRUList = 0x200;
    
  2. W pliku TestCommand.cs dodaj następującą instrukcję using.

    using System.Collections;
    
  3. Dodaj następujący kod w konstruktorze TestCommand po ostatnim wywołaniu AddCommand. Element InitMRUMenu zostanie zdefiniowany później

    this.InitMRUMenu(commandService);
    
  4. Dodaj następujący kod w klasie TestCommand. Ten kod inicjuje listę ciągów reprezentujących elementy, które mają być wyświetlane na liście MRU.

    private int numMRUItems = 4;
    private int baseMRUID = (int)TestCommandPackageGuids.cmdidMRUList;
    private ArrayList mruList;
    
    private void InitializeMRUList()
    {
        if (null == this.mruList)
        {
            this.mruList = new ArrayList();
            if (null != this.mruList)
            {
                for (int i = 0; i < this.numMRUItems; i++)
                {
                    this.mruList.Add(string.Format(CultureInfo.CurrentCulture,
                        "Item {0}", i + 1));
                }
            }
        }
    }
    
  5. Po metodzie InitializeMRUList dodaj metodę InitMRUMenu . Spowoduje to zainicjowanie poleceń menu listy narzędzi MRU.

    private void InitMRUMenu(OleMenuCommandService mcs)
    {
        InitializeMRUList();
        for (int i = 0; i < this.numMRUItems; i++)
        {
            var cmdID = new CommandID(
                new Guid(TestCommandPackageGuids.guidTestCommandPackageCmdSet), this.baseMRUID + i);
            var mc = new OleMenuCommand(
                new EventHandler(OnMRUExec), cmdID);
            mc.BeforeQueryStatus += new EventHandler(OnMRUQueryStatus);
            mcs.AddCommand(mc);
        }
    }
    

    Należy utworzyć obiekt polecenia menu dla każdego możliwego elementu na liście MRU. Środowisko IDE wywołuje metodę OnMRUQueryStatus dla każdego elementu na liście MRU, dopóki nie ma więcej elementów. W kodzie zarządzanym jedynym sposobem, aby środowisko IDE wiedziało, że nie ma więcej elementów, jest najpierw utworzenie wszystkich możliwych elementów. Jeśli chcesz, możesz oznaczyć dodatkowe elementy jako niewidoczne na początku, używając polecenia mc.Visible = false; menu po utworzeniu polecenia menu. Te elementy można następnie uwidocznić później przy użyciu mc.Visible = true; metody OnMRUQueryStatus .

  6. Po metodzie InitMRUMenu dodaj następującą OnMRUQueryStatus metodę. Jest to procedura obsługi, która ustawia tekst dla każdego elementu MRU.

    private void OnMRUQueryStatus(object sender, EventArgs e)
    {
        OleMenuCommand menuCommand = sender as OleMenuCommand;
        if (null != menuCommand)
        {
            int MRUItemIndex = menuCommand.CommandID.ID - this.baseMRUID;
            if (MRUItemIndex >= 0 && MRUItemIndex < this.mruList.Count)
            {
                menuCommand.Text = this.mruList[MRUItemIndex] as string;
            }
        }
    }
    
  7. Po metodzie OnMRUQueryStatus dodaj następującą OnMRUExec metodę. Jest to procedura obsługi wybierania elementu MRU. Ta metoda przenosi wybrany element na górę listy, a następnie wyświetla wybrany element w polu komunikatu.

    private void OnMRUExec(object sender, EventArgs e)
    {
        var menuCommand = sender as OleMenuCommand;
        if (null != menuCommand)
        {
            int MRUItemIndex = menuCommand.CommandID.ID - this.baseMRUID;
            if (MRUItemIndex >= 0 && MRUItemIndex < this.mruList.Count)
            {
                string selection = this.mruList[MRUItemIndex] as string;
                for (int i = MRUItemIndex; i > 0; i--)
                {
                    this.mruList[i] = this.mruList[i - 1];
                }
                this.mruList[0] = selection;
                System.Windows.Forms.MessageBox.Show(
                    string.Format(CultureInfo.CurrentCulture,
                                  "Selected {0}", selection));
            }
        }
    }
    

Testowanie listy narzędzi MRU

  1. Skompiluj projekt i rozpocznij debugowanie.

  2. W menu TestMenu kliknij pozycję Wywołaj testPolecenia. Spowoduje to wyświetlenie pola komunikatu wskazującego, że polecenie zostało wybrane.

    Uwaga

    Ten krok jest wymagany, aby wymusić załadowanie pakietu VSPackage i poprawne wyświetlenie listy MRU. Jeśli pominiesz ten krok, lista MRU nie zostanie wyświetlona.

  3. W menu Menu testowe kliknij pozycję Menu podrzędne. Lista czterech elementów jest wyświetlana na końcu podmenu poniżej separatora. Po kliknięciu pozycji Element 3 powinno zostać wyświetlone pole komunikatu i wyświetlić tekst Wybrany element 3. (Jeśli lista czterech elementów nie jest wyświetlana, upewnij się, że zostały spełnione instrukcje w poprzednim kroku).

  4. Otwórz ponownie podmenu. Zwróć uwagę, że element 3 znajduje się teraz w górnej części listy, a pozostałe elementy zostały wypchnięte w dół o jedną pozycję. Ponownie kliknij pozycję Element 3 i zwróć uwagę, że w polu komunikatu nadal jest wyświetlany element Wybrany 3, co oznacza, że tekst został poprawnie przeniesiony do nowej pozycji wraz z etykietą polecenia.