2016-08-01 63 views
1

我有一個代碼,用於在Excel 2010中使用Excel列出所有員工的SQL時間條目(In Time,Out Time,Comments,Employee Name)信息加載項目。在這裏,我想提前一步從ComboBox控件(它分別在標籤和標籤屬性中保存員工姓名和員工標識)中列出所選員工的時間輸入信息,並使用Excel加載項將其放置在Excel功能區中。在VSTO(VB.Net)中獲取Ribbon ComboBox控件的選定項目標籤

在這裏,我無法從我添加的ComboBox中獲取選定員工的標籤(Id)。

請任何人幫我解決這個問題。

謝謝

回答

3

那麼這有點棘手,但可行。首先,你可以做到這一點只能通過功能區XML(不通過設計師 - 至少我不知道它

我創造了非常簡單的XML

<?xml version="1.0" encoding="UTF-8"?> 
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load"> 
    <ribbon> 
    <tabs> 
     <tab idMso="TabAddIns"> 
     <group id="MyGroup" 
       label="My Group"> 
      <dropDown id ="cbTest" 
        label="Test Item" 
        getItemID="GetItemID" 
        getItemLabel="GetItemLabel" 
        getItemCount="GetItemCount" 
        onAction="OnAction"> 
      </dropDown > 
     </group> 
     </tab> 
    </tabs> 
    </ribbon> 
</customUI> 

的關鍵部分是GetItemCount你可以按照你的意願命名) 沒有這個回調函數,你將永遠不會得到getItemID或getItemLabel的任何回調。

剩下的就是那麼簡單的,創建一個對象存儲你所需要的所有信息,如這裏

public class Employee 
    { 
     public Employee(int id, string name) 
     { 
      this.ID = id; 
      this.Name = name; 
     } 
     public int ID { get; set; } 
     public string Name { get; set; } 
    } 

啓動的對象與價值觀像下面(更容易下面我把所有的功能區類中,但這絕對是不錯的辦法

public class Ribbon1 : Office.IRibbonExtensibility 
    { 
     private Office.IRibbonUI ribbon; 
     private List<Employee> _employees = new List<Employee>(); 

     public Ribbon1() 
     { 
      _employees.Add(new Employee(1, "John")); 
      _employees.Add(new Employee(2, "Mark")); 
      _employees.Add(new Employee(3, "Tom")); 
     } 
// ... rest of the code here 
} 

,然後回調(仍然Ribbon1類中) (對於列表回調是指here

public int GetItemCount(Office.IRibbonControl control) 
    { 
     return _employees.Count; 
    } 

    public string GetItemID(Office.IRibbonControl control, int index) 
    { 
     var employee = _employees[index]; 
     return employee.ID.ToString(); 
    } 

    public string GetItemLabel(Office.IRibbonControl control, int index) 
    { 
     var employee = _employees[index]; 
     return employee.Name; 
    } 

    public void OnAction(Office.IRibbonControl control, string selectedId, int selectedIndex) 
    { 
     var selected = string.Format("{0} ({1})", _employees[selectedIndex].Name, _employees[selectedIndex].ID); 
     System.Windows.Forms.MessageBox.Show(selected); 
    } 

那麼你應該在這個例子中看到的下拉列表中的Office應用程序,加載項選項卡下與樹值,當你選擇一個你應該得到的名稱和ID僱員。

+0

感謝您的回答。讓我試試這個。 –

+0

真棒!它的工作正常......謝謝@PetLahev。 –

相關問題