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