Почему ComboBox скрывает курсор, когда DroppedDown установлен?

Следующий метод должен возвратить DateTime, который Вы хотите. Передача в истинном в течение воскресенья, будучи первым днем недели, лжи в течение понедельника:

private DateTime getStartOfWeek(bool useSunday)
{
    DateTime now = DateTime.Now;
    int dayOfWeek = (int)now.DayOfWeek;

    if(!useSunday)
        dayOfWeek--;

    if(dayOfWeek < 0)
    {// day of week is Sunday and we want to use Monday as the start of the week
    // Sunday is now the seventh day of the week
        dayOfWeek = 6;
    }

    return now.AddDays(-1 * (double)dayOfWeek);
}
15
задан Ivan Danilov 7 July 2009 в 15:37
поделиться

3 ответа

Мне удалось обойти проблему следующим образом:

comboBox1.DroppedDown = true;
Cursor.Current = Cursors.Default;
33
ответ дан 1 December 2019 в 01:05
поделиться

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

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

Я подозреваю, что каждое скрытие хранит состояние курсора и восстанавливает его при выходе.

Текстовое поле сохранило фактическое состояние курсора и скрыло его.

Выпадающее меню вызывает сохранение скрытого состояния и установку курсора на скрытый. Когда вы перемещаете курсор, он, вероятно, восстанавливает его, но до скрытого состояния, которое он сохранил, поэтому курсор остается скрытым.

Щелчок по форме, кажется, приводит к сбросу этой ситуации, не знаю почему, но это мои 2 пеннета.

1
ответ дан 1 December 2019 в 01:05
поделиться

In fact I was able to resolve this issue in this way:

#region Dirty methods :)
#pragma warning disable 169
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);

private const int MOUSEEVENTF_ABSOLUTE = 0x8000;
private const int MOUSEEVENTF_MOVE = 0x1;
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
#pragma warning restore 169
#endregion

private void button1_Click(object sender, EventArgs e) {
   Point oldCursorPos = Cursor.Position; // save pos
   Point a = comboBox1.Parent.PointToScreen(comboBox1.Location);
   a.X += comboBox1.Width - 3;
   a.Y += comboBox1.Height - 3;
   Cursor.Position = a;
   // simuate click on drop down button
   mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
   Cursor.Position = oldCursorPos; // restore pos
}

But it is not the solution I want :( It is rather a crutch but not a solution.

1
ответ дан 1 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: