我已经在我的工作表中动态添加了一个组合框,我想在两个事件结束时动态删除组合框 - 特别是 combobox.LostFocus 和 combobox.KeyDown 事件。
它目前适用于两种情况:
- 用户手动从下拉列表中选择一个项目
- 用户部分输入项目并自动完成其余部分的填写,然后用户按键盘上的 Enter 键。
如果用户输入整个文本以进行选择,然后按回车键,则它不起作用。我收到消息:
用户代码未处理 COMException:无法获取 OLEObject 类的 Name 属性
Visual Studio 指向行'sheetVSTO.Controls.Remove(myBox);' 在 myBox_LostFocus 事件处理程序中作为失败的来源。
用户展示能够将整个文本键入组合框并按回车键。任何帮助,将不胜感激。
这是我所拥有的(如果需要更详细的信息,请告诉我):
private void AddComboBox(String[] list)
{
Excel.Worksheet sheet = Globals.ThisAddIn.Application.ActiveSheet;
Microsoft.Office.Tools.Excel.Worksheet sheetVSTO = Globals.Factory.GetVstoObject(sheet);
Excel.Range cell = Globals.ThisAddIn.Application.ActiveCell;
Microsoft.Office.Tools.Excel.Controls.ComboBox myBox= new Microsoft.Office.Tools.Excel.Controls.ComboBox();
myBox.Name = "button1";
myBox.Items.AddRange(list);
myBox.KeyDown += new KeyEventHandler(myBox_KeyDown);
myBox.LostFocus += new EventHandler(myBox_LostFocus);
myBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
myBox.AutoCompleteSource = AutoCompleteSource.ListItems;
myBox.Focus();
Microsoft.Office.Tools.Excel.ControlSite myBoxControl = sheetVSTO.Controls.AddControl(myBox, cell, boxName);
}
void myBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == System.Windows.Forms.Keys.Enter)
{
Microsoft.Office.Tools.Excel.Controls.ComboBox myBox = sender as Microsoft.Office.Tools.Excel.Controls.ComboBox;
Excel.Worksheet sheet = Globals.ThisAddIn.Application.ActiveSheet;
if (myBox.SelectedIndex > -1)
{
Microsoft.Office.Tools.Excel.Worksheet sheetVSTO = Globals.Factory.GetVstoObject(sheet);
sheetVSTO.Controls.Remove(myBox);
}
}
}
void myBox_LostFocus(object sender, EventArgs e)
{
Microsoft.Office.Tools.Excel.Controls.ComboBox myBox = sender as Microsoft.Office.Tools.Excel.Controls.ComboBox;
Excel.Worksheet sheet = Globals.ThisAddIn.Application.ActiveSheet;
Microsoft.Office.Tools.Excel.Worksheet sheetVSTO = Globals.Factory.GetVstoObject(sheet);
sheetVSTO.Controls.Remove(myBox);
}