2016-01-25 4 views
7

私はVSCTファイルでこの設定を使用して、Visual Studioの2015年VSIXパッケージ内のツールバーのための動的なコンボを定義している:Visual Studio 2015ツールバーのコンボ、ユーザーが正しく入力した値を管理する方法?

<Combo guid="cmdExplorerToolbarSearchGUID" id="cmdExplorerToolbarSearchID" priority="0x0" type="DynamicCombo" 
     defaultWidth="50" idCommandList="cmdExplorerToolbarSearchGetListID"> 
    <Parent guid="grpExplorerToolbar3GUID" id="grpExplorerToolbar3ID" /> 
    <CommandFlag>DynamicVisibility</CommandFlag> 
    <CommandFlag>IconAndText</CommandFlag> 
    <CommandFlag>StretchHorizontally</CommandFlag> 
    <Strings> 
     <CanonicalName>cmdExplorerToolbarSearch</CanonicalName> 
     <ButtonText>Search</ButtonText> 
     <ToolTipText>Search elements in the model explorer</ToolTipText> 
    </Strings> 
    </Combo> 

</Combos> 

対応DynamicStatusMenuCommandインスタンスは次のように定義されています。

command = new DynamicStatusMenuCommand(
     new EventHandler(this.OnPopUpMenuDisplayAction), 
     new EventHandler(this.OnCmdExplorerToolbarSearchSelected), 
     new CommandID(CmdExplorerToolbarSearchGUID, CmdExplorerToolbarSearchID)); 
    commands.Add(command); 

    command = new DynamicStatusMenuCommand(
     new EventHandler(this.OnPopUpMenuDisplayAction), 
     new EventHandler(this.OnCmdExplorerToolbarSearchGetList), 
     new CommandID(CmdExplorerToolbarSearchGUID, CmdExplorerToolbarSearchGetListID)); 
    commands.Add(command); 

そして最後に、このようなOnCmdExplorerToolbarSearchSelectedイベントハンドラは:

private void OnCmdExplorerToolbarSearchSelected(object sender, EventArgs e) 
{ 
    // Process the event arguments 

    OleMenuCmdEventArgs args = e as OleMenuCmdEventArgs; 
    if (args != null) 
    { 
     // Process values 

     string inValue = args.InValue as string; 
     IntPtr outValue = args.OutValue; 

     if (outValue != IntPtr.Zero) 
     { 
      // When outValue is not null, the IDE is requesting the current value for the combo 

      Marshal.GetNativeVariantForObject(this.SearchHandler.CurrentValue, outValue); 
     } 
     else if (inValue != null) 
     { 
      this.SearchHandler.Search(this.PresentationModel3ExplorerToolWindow.Explorer, inValue); 
     } 
    } 
} 

これは、その結果ツールボックスでの素敵なコンボは:!

Print-screen of the toolbar

問題は=ユーザーは、例えば、「ユニット」を入力し、Enter押した場合は、イベントハンドラがinvalueパラメータと呼ばれていることをnullで、検索が実行されます。しかし、何か他のもの(例:Customer)を入力してTabEnter)を押すと、ハンドラはargs.OutValue!= IntPtr.Zeroで呼び出されるため、コンボは前の値( "Unit")に戻ります。

ユーザが何かを入力してフォーカスをコンボから離したときにコールバックを取得する方法は、Enterを押すことなくですか?それで、その瞬間にコンボにある価値をどのように得ることができるのですか?

答えて

0

私はこれを試していませんが、OleMenuCommandを使用してコマンドをインストールすると、コンボボックスのテキストが変更されたときに呼び出されるような "変更済み"ハンドラを提供できます。これにより、あなたが望むことをすることができますか?

関連する問題