Winforms Checkbox combobox один клик вместо двойного клика - PullRequest
2 голосов
/ 19 сентября 2011

Я использую элемент управления комбинированного списка Checkbox, расположенный по адресу: http://www.codeproject.com/KB/combobox/extending_combobox.aspx,

, и у меня возникла проблема, когда в комбинированном окне флажка сначала требуется два щелчка, чтобы выбрать элемент, но после первого щелчкаТребуется только один.Мне нужна коробка, чтобы требовать только один щелчок независимо.

Кто-нибудь еще имел эту проблему и сумел решить?Тот же вопрос был задан другому пользователю на сайте проекта кода, указанном выше, но без ответа.

Спасибо

Джеймс

Ответы [ 2 ]

2 голосов
/ 03 июля 2012

Приведенное выше решение является правильным для решения первой проблемы, когда для входа в список флажков потребовалось два щелчка, однако при вводе элемента управления возникает новая проблема, когда он выходит из него, он сохраняет фокус и необходимо дважды щелкнутьперейти к другому контролю.Мне удалось исправить это с помощью следующего кода:

В CheckBoxComboBox.cs добавить следующее переопределение:

    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);
        this.Parent.Focus();
    }

С ответом от Роба П. и этот ответ, он не будет удерживатьсясосредоточиться на любом событии клика.

1 голос
/ 19 сентября 2011

Звучит как проблема фокуса (первый щелчок активирует элемент управления, а второй щелчок - флажок).

Вы пробовали решение ниже?

/// <summary>
/// Processes Windows messages.
/// </summary>
/// <param name="m">The Windows <see cref="T:System.Windows.Forms.Message" /> to process.</param>
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override void WndProc(ref Message m) {
    if (m.Msg == (NativeMethods.WM_COMMAND + NativeMethods.WM_REFLECT) && NativeMethods.HIWORD(m.WParam) == NativeMethods.CBN_DROPDOWN) {
        // Wout: changed this to use BeginInvoke instead of calling ShowDropDown directly.
        // When calling directly, the Control doesn't receive focus.
        BeginInvoke(new MethodInvoker(ShowDropDown));
        return;
    }
    base.WndProc(ref m);
}

Я не могу взять кредит на код - но комментарий, кажется, совпадает с моим внутренним чувством - он не фокусировался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...