2016-10-07 35 views
1

正在创建VS Outlook外接程序。VSTO功能区组合框文本更改事件回调

如何获取组合框的文本更改事件。我想打电话给我的API来获取数据,而用户在组合框中

  <comboBox id="cmbUsers" label="Users" showImage="false" 
       getItemCount="OnGetItemCount" 
       getItemLabel="OnGetItemLabel" 
       onChange="OnChange" 
       getText="GetText" 
       getKeytip="GetKeytip"/> 

我的OnChange呼叫试图回输入一些文字,但它不能正常工作。但是在Ribbon Designer中我可以看到TextChange事件。

如何使用回调事件的文字变化

[ComVisible(true)] 
public class Ribbon : Office.IRibbonExtensibility 
{ 
    private Office.IRibbonUI ribbon; 

    public Ribbon() 
    { 
    } 

    #region IRibbonExtensibility Members 

    public string GetCustomUI(string ribbonID) 
    { 
     return GetResourceText("UserOutlookAddin.Ribbon.xml"); 
    } 

    #endregion 

    #region Ribbon Callbacks 
    //Create callback methods here. For more information about adding callback methods, select the Ribbon XML item in Solution Explorer and then press F1 

    public void Ribbon_Load(Office.IRibbonUI ribbonUI) 
    { 
     this.ribbon = ribbonUI; 



    } 

    public void OnActionCallback(Office.IRibbonControl control) 
    { 
     if (control.Id == "checkBox1") 
     { 
      MessageBox.Show("You clicked " + control.Id); 
     } 
     else 
     { 
      MessageBox.Show("You clicked a different control."); 
     } 
    } 
    public void OnGetItemCount(Office.IRibbonControl control) 
    { 
     Debug.WriteLine("##### Am OnGetItemCount"); 
    } 
    public void OnGetItemLabel(Office.IRibbonControl control) 
    { 
     Debug.WriteLine("##### Am OnGetItemLabel"); 
    } 
    public void OnChange(Office.IRibbonControl control) 
    { 
     Debug.WriteLine("##### Am OnChange"); 
    } 
    public void GetText(Office.IRibbonControl control) 
    { 
     Debug.WriteLine("##### Am GetText"); 
    } 
    public void GetKeytip(Office.IRibbonControl control) 
    { 
     Debug.WriteLine("##### Am GetKeytip"); 
    } 

    #endregion 

    #region Helpers 

    private static string GetResourceText(string resourceName) 
    { 
     Assembly asm = Assembly.GetExecutingAssembly(); 
     string[] resourceNames = asm.GetManifestResourceNames(); 
     for (int i = 0; i < resourceNames.Length; ++i) 
     { 
      if (string.Compare(resourceName, resourceNames[i], StringComparison.OrdinalIgnoreCase) == 0) 
      { 
       using (StreamReader resourceReader = new StreamReader(asm.GetManifestResourceStream(resourceNames[i]))) 
       { 
        if (resourceReader != null) 
        { 
         return resourceReader.ReadToEnd(); 
        } 
       } 
      } 
     } 
     return null; 
    } 

    #endregion 
} 
+0

你可以发布有关'OnChange' C#代码? – haindl

+0

@haindl是的,我现在更新 –

回答

1

更改onChange回调的签名从

public void OnChange(Office.IRibbonControl control) 

public void OnChange(Office.IRibbonControl control, string text) 

现在应该被调用。

另外,你应该从

public void OnGetItemCount(Office.IRibbonControl control) 
public void OnGetItemLabel(Office.IRibbonControl control) 
public void GetText(Office.IRibbonControl control) 
public void GetKeytip(Office.IRibbonControl control) 

改变getItemCountgetItemLabelgetTextgetKeytip的签名

public int OnGetItemCount(Office.IRibbonControl control) 
public string OnGetItemLabel(Office.IRibbonControl control, int index) 
public string GetText(Office.IRibbonControl control) 
public string GetKeytip(Office.IRibbonControl control)