2016-01-25 8 views
7

मैं दृश्य स्टूडियो 2015 के लिए एक VSIX पैकेज में एक उपकरण पट्टी के लिए एक गतिशील कॉम्बो परिभाषित किया है VSCT फ़ाइल में इस सेटिंग का उपयोग:विजुअल स्टूडियो 2015 टूलबार कॉम्बो, उपयोगकर्ता द्वारा सही तरीके से दर्ज किए गए मान को कैसे प्रबंधित करें?

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); 

:

<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 उदाहरणों पालन परिभाषित कर रहे हैं और अंत में इस तरह 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 साथ कहा जाता है शून्य है = और खोज किया जाता है। लेकिन अगर, तो वह कुछ और (उदाहरण: ग्राहक) में प्रवेश करता है और Tab (Enter) दबाता है, कॉम्बो पिछले मान ("यूनिट") पर वापस आ जाता है क्योंकि हैंडलर को args.OutValue! = IntPtr.Zero कहा जाता है।

जब कोई उपयोगकर्ता प्रवेश करता है और Enter दबाए बिना कॉम्बो से दूर फोकस करता है तो कॉलबैक प्राप्त करने की चाल क्या होती है? और, यह देखते हुए, मैं उस पल में कॉम्बो पर मूल्य कैसे प्राप्त कर सकता हूं?

उत्तर

0

मैंने यह कोशिश नहीं की है, लेकिन यदि आप OleMenuCommand का उपयोग करके अपना कमांड इंस्टॉल करते हैं, तो आप "चेंज" हैंडलर प्रदान कर सकते हैं, ऐसा लगता है जैसे कॉम्बो बॉक्स में टेक्स्ट बदलता है। यह आपको वही करने की अनुमति दे सकता है जो आप चाहते हैं?

संबंधित मुद्दे