2016-10-07 2 views
1

Создает VS Outlook Addin.VSTO Ribbon Combo Box Текст Изменено событие Обратный звонок

Как получить событие изменения текста в поле со списком. Я хочу назвать свой 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

Вы можете разместить код C#, связанные с 'OnChange'? – haindl

+0

@haindl да, я обновил сейчас –

ответ

1

Измените подпись onChange обратного вызова из

public void OnChange(Office.IRibbonControl control) 

в

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

Теперь он должен получить называется.

Кроме того, вы должны изменить подписи getItemCount, getItemLabel, getText и getKeytip от

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

в

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^