0

最近スタジオ 2008 から 2010 に変換されたプロジェクトがあります。それは DSL を大いに利用しています。SDK に付属の DslProjectsMigrationTool を使用しました。機能の多くは機能していますが、メニューにいくつか問題があります。コードを作成する 3 つのボタンを備えたカスタム ツールバーがあります。ただし、イベント ハンドラは機能していないようです。私は 1 つ戻って 2008 年バージョンをチェックしましたが、これは問題なく動作していました。

残念ながら、このコードはどれも私自身のものではなく、最初にそれを書いた人は引っ越しており、助けることができません。

Commands.vsct には

<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <Commands package="guidPkg">
        <Menus>
            <Menu guid="guidCmdSet" id="blueprintToolbar" priority="0x0000" type="Toolbar">
                <Parent guid="guidCmdSet" id="blueprintToolbar"/>
                <CommandFlag>DefaultDocked</CommandFlag>
                <CommandFlag>AlwaysCreate</CommandFlag>
                <Strings>
                    <ButtonText>Blueprint Toolbar</ButtonText>
                </Strings>
            </Menu>         
        </Menus>

        <Groups>
            <Group guid="guidCmdSet" id="grpidTranslate" priority="0x0000">
                <Parent guid="guidCmdSet" id="blueprintToolbar" />
            </Group>
        </Groups>

        <Buttons>
            <Button guid="guidCmdSet" id="cmdidReTranslateAllCmd" priority="0x0100" type="Button">
                <Parent guid="guidCmdSet" id="grpidTranslate" />
                <Icon guid="guidCmdSet" id="bmpPic1"/>
                <CommandFlag>TextOnly</CommandFlag>
                <Strings>
                    <ButtonText>&lt;Retranslate All&gt;</ButtonText>
                </Strings>
            </Button>
            <Button guid="guidCmdSet" id="cmdidTranslateAllCmd" priority="0x0101" type="Button">
                <Parent guid="guidCmdSet" id="grpidTranslate" />
                <Icon guid="guidCmdSet" id="bmpPic1"/>
                <CommandFlag>TextOnly</CommandFlag>
                <Strings>
                    <ButtonText>&lt;Translate All&gt;</ButtonText>
                </Strings>
            </Button>
            <Button guid="guidCmdSet" id="cmdidTranslateCurCmd" priority="0x0102" type="Button">
                <Parent guid="guidCmdSet" id="grpidTranslate" />
                <Icon guid="guidCmdSet" id="bmpPic1"/>
                <CommandFlag>TextOnly</CommandFlag>
                <Strings>
                    <ButtonText>&lt;Translate Current&gt;</ButtonText>
                </Strings>
            </Button>
        </Buttons>

    </Commands>

    <Symbols>
        <GuidSymbol name="guidCmdSet" value="Extern">

            <!--Group IDs-->
            <IDSymbol name="grpidTranslate" value="0x1050"/>

            <!--Command IDs-->
            <IDSymbol name="cmdidTranslateAllCmd" value="0x9100"/>
            <IDSymbol name="cmdidTranslateCurCmd" value="0x9101"/>
            <IDSymbol name="cmdidReTranslateAllCmd" value="0x9102"/>

            <IDSymbol name="blueprintToolbar" value="0x1000"/>
            <IDSymbol name="bmpPic1" value="1"/>
        </GuidSymbol>

    </Symbols>
</CommandTable>

次に CommandSetOverride.cs に

/// <summary>
/// Constants relating to commands
/// </summary>
partial class Constants
{
  public const string CLSID_StandardCommandSet97 = "5efc7975-14bc-11cf-9b2b-00aa00573819";

  #region Command Codes     

  const int cmdidTranslateAllCmd = 0x9100;
  const int cmdidTranslateCurrentCmd = 0x9101;
  const int cmdidReTranslateAllCmd = 0x9102;

  #endregion
  #region CommandIDs

  public static readonly CommandID TranslateAllCommandID = 
     new CommandID(new Guid(Constants.BlueprintCommandSetId), cmdidTranslateAllCmd);
  public static readonly CommandID TranslateCurrentCommandID =
     new CommandID(new Guid(Constants.BlueprintCommandSetId), cmdidTranslateCurrentCmd);
  public static readonly CommandID ReTranslateAllCommandID =
     new CommandID(new Guid(Constants.BlueprintCommandSetId), cmdidReTranslateAllCmd);

  #endregion 
}

/// <summary>
/// Additions to the blueprint command set for context menu items and extra commands.
/// </summary>
partial class BlueprintCommandSet
{
  /// <summary>
  /// Retrieves the available menu commands
  /// </summary>
  /// <returns>List of menu commands</returns>
  protected override IList<MenuCommand> GetMenuCommands()
  {
     IList<MenuCommand> commands = base.GetMenuCommands();

     OleMenuCommand oleMenuCommand;

     // Translate
     if (null != MenuService)
     {
        MenuCommand menuCommand = new MenuCommand(new EventHandler(OnTranslateAll), Constants.TranslateAllCommandID);
        MenuService.AddCommand(menuCommand);

        menuCommand = new MenuCommand(new EventHandler(OnTranslateCurrent), Constants.TranslateCurrentCommandID);
        MenuService.AddCommand(menuCommand);

        menuCommand = new MenuCommand(new EventHandler(OnReTranslateAll), Constants.ReTranslateAllCommandID);
        MenuService.AddCommand(menuCommand);
     }

     return commands;
  }

  #region Translation 
  /// <summary>
  /// Handles the "ReTranslate All" toolbar button command.
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void OnReTranslateAll(object sender, EventArgs e)
  {
     ReTranslateAll();
  }

  /// <summary>
  /// Handles the "Translate All" toolbar button command.
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void OnTranslateAll(object sender, EventArgs e)
  {
     TranslateAll(false);
  }

  /// <summary>
  /// Handles the "Translate Current" toolbar button command.
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void OnTranslateCurrent(object sender, EventArgs e)
  {
     TranslateCurrent();         
  }

  #endregion
}

インストールされたバージョンまたはハイブで実行しているときにコードを実行すると、ボタンは問題なくツールバーに表示されますが、ボタンをクリックしても OntranslateAll などは呼び出されません。どんな助けでも非常に役に立ちます。

4

1 に答える 1

0

CommandSetId Guid が 2 つの場所で明示的に使用され、1 つのバージョンは 2010 バージョンに更新され、2 つ目は更新されていないことがわかりました。異なる GUID を使用すると、イベントが間違った場所に送信されました

于 2013-04-02T12:37:43.620 に答える