1
我已經動態地在工作表中添加了組合框,並且我想在兩個事件結束時動態刪除組合框 - 特別是combobox.LostFocus和combobox.KeyDown事件。Excel控件 - 動態刪除組合框
目前,它適用於兩種情況:
- 使用手動從下拉列表中的項目
- 用戶部分類型選擇一個項目,並自動完成填補了休息,然後用戶點擊進入在鍵盤上。
如果用戶輸入select的整個文本並按下回車鍵,則不起作用。我得到的消息:
收到COMException是由用戶代碼unhanded:無法OLEOBJECT類的名稱屬性得到
的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);
}
是完整的文本輸入失敗,包含在自動完成源項目的清單?或者你是否還需要添加新項目? – datatoo
失敗的行在myBox_LostFocus事件處理程序中,特別是在'sheetVSTO.Controls.Remove(myBox)' – scifirocket
以更好地回答您的問題,自動完成源中的完整文本項IS。但是當輸入完整的項目時,自動完成下拉列表消失。 – scifirocket