2016-08-01 235 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。 –

相关问题