1
내 워크 시트에 동적으로 콤보 상자를 추가 했으므로 combobox.LostFocus 및 combobox.KeyDown 이벤트의 두 이벤트가 끝날 때 동적으로 콤보 상자를 삭제하려고합니다.Excel 컨트롤 - 동적으로 콤보 상자 삭제
그것은 현재 두 가지 시나리오에 대해 작동합니다
사용은 수동으로-
키보드에.
사용자가 전체 텍스트를 선택하여 입력하고 Enter 키를 누르면 작동하지 않습니다.
COMException가 사용자 코드에 의해 unhanded했다 : 나는 메시지를 얻을
비주얼 스튜디오 점 라인 'sheetVSTO.Controls.Remove (myBox)에 OLEObject입니다 클래스의 이름 속성을 가져올 수 없습니다를; ' 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
귀하의 질문에 더 잘 답변하기 위해 전체 텍스트 항목은 자동 완성 소스에 있습니다. 하지만 전체 항목을 입력하면 자동 완성 드롭 다운이 사라집니다. – scifirocket