Следующий метод должен возвратить 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);
}
Мне удалось обойти проблему следующим образом:
comboBox1.DroppedDown = true;
Cursor.Current = Cursors.Default;
Для начала, это очень непонятный набор обстоятельств, которые я не могу представить как полезное действие интерфейса.
Похоже, это ошибка, из-за которой программный раскрывающийся список начинает редактирование в текстовом поле, которое является частью раскрывающегося списка, так эффективно скрывая курсор. Чтобы сломать его ...
Я подозреваю, что каждое скрытие хранит состояние курсора и восстанавливает его при выходе.
Текстовое поле сохранило фактическое состояние курсора и скрыло его.
Выпадающее меню вызывает сохранение скрытого состояния и установку курсора на скрытый. Когда вы перемещаете курсор, он, вероятно, восстанавливает его, но до скрытого состояния, которое он сохранил, поэтому курсор остается скрытым.
Щелчок по форме, кажется, приводит к сбросу этой ситуации, не знаю почему, но это мои 2 пеннета.
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.