Excel控件 – dynamic删除combobox
我已经dynamic地在工作表中添加了combobox,并且我想在两个事件结束时dynamic地删除combobox – 特别是combobox.LostFocus和combobox.KeyDown事件。
它目前适用于两种情况:
- 使用手动从下拉菜单中select一个项目
- 用户部分键入一个项目,自动完成填充其余部分,然后用户敲击键盘input。
如果用户inputselect的整个文本并按下回车键,则不起作用。 我收到消息:
COMException被用户代码取消:无法获取OLEObject类的Name属性
Visual Studio指向行'sheetVSTO.Controls.Remove(myBox);' 在myBox_LostFocus事件处理程序中作为失败的来源。
用户显示能够将整个文本input到combobox中并按下回车键。 任何帮助,将不胜感激。
这是我的(如果需要更详细的信息,请告诉我):
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); }
我find了答案!
我改变了我的2删除电话:
myBox.BeginInvoke(new MethodInvoker(delegate { sheetVSTO.Controls.Remove(myBox); }));