У нас есть пример приложения с таким обработчиком для выпадающего списка в режиме «DropDownList»:
private void comboBox1_Leave(object sender, EventArgs e)
{
comboBox1.SelectionStart = 0;
comboBox1.SelectionLength = 0;
}
приведенный выше код ведет себя по-разному в зависимости от того, загружено ли приложение CALLWNDPROC-хук или нет. Если в приложении есть хук CALLWNDPROC - приведенный выше код будет генерировать исключение всякий раз, когда выпадающий список теряет фокус. Без хука - этот код не выдает.
это несколько строк из описания исключения:
System.ArgumentOutOfRangeException: InvalidArgument=Value of '-2136611475' is not valid for 'start'.
Parameter name: start
at System.Windows.Forms.ComboBox.Select(Int32 start, Int32 length)
at System.Windows.Forms.ComboBox.set_SelectionLength(Int32 value)
at ComboCrash.Form1.comboBox1_Leave(Object sender, EventArgs e) in T:\tmp.proj\ComboCrash\ComboCrash\Form1.cs:line 32
at System.Windows.Forms.Control.OnLeave(EventArgs e)
at System.Windows.Forms.Control.NotifyLeave()
at System.Windows.Forms.ContainerControl.UpdateFocusedControl()
Вопрос: что может быть причиной такого различного поведения с установленным хуком?
PS1: я не разработчик C #, но мне кажется, что концепция текстового выбора не применима для выпадающих списков DropDownList (так как у них нет текстового поля), это правильно?
PS2: Приложение, которое устанавливает ловушку и подключаемую DLL, написаны на C ++.
Функция крючка так же проста, как:
return (CallNextHookEx(hook_handle, code, wParam, lParam));