Деактивиране на натисканията на цифри в DateTimePicker?

Как мога да направя така, че ако натиснете число, докато избирате DateTimePicker, то да не промени стойността?

В момента имам onKeyDown за улавяне на всички числа и задаване на e.Handled = true, но това все още не изглежда да го отменя.

Благодаря!


person sooprise    schedule 24.10.2011    source източник
comment
От интерес, защо искате да направите това? Какво имате против хората, които предпочитат да използват клавиатурата, отколкото мишката?   -  person Jon Skeet    schedule 24.10.2011
comment
DateTimePicker има някаква функционалност за промяна на датата, която се контролира чрез натискане на стрелки, така че все още има известен контрол от клавиатурата. Въпреки че съм съгласен с вас, че би било най-добре да запазите функционалността на номера, това е чисто искане от по-високо ниво.   -  person sooprise    schedule 24.10.2011


Отговори (1)


Опитайте вместо това да замените събитието OnKeyPress:

protected override void OnKeyPress(KeyPressEventArgs e) {
  e.Handled = true;
  base.OnKeyPress(e);
}

или ако просто използвате текущия DateTimePicker, без да създавате свой собствен контрол:

private void dateTimePicker1_KeyPress(object sender, KeyPressEventArgs e) {
  e.Handled = true;
}

Клавишите със стрелки все още трябва да работят.

person LarsTech    schedule 24.10.2011
comment
По някаква причина, когато поставям някакъв код в моя DateTimePicker_KeyPress дори, кодът никога не се достига, когато всъщност натисна клавиш. някакви мисли? - person sooprise; 24.10.2011
comment
@sooprise Звучи сякаш заменяте метода OnKeyPress и НЕ предавате base.OnKeyPress(e)? Иначе не, не съм сигурен какво правиш. Моят малък пример работи върху нова форма. Натискането на клавишите със стрелки работи, натискането на цифри и букви не променя датата. - person LarsTech; 24.10.2011
comment
Ах, аз съм такъв нуб, не разбрах какво става в поста ти. Благодаря за това допълнително обяснение! :) - person sooprise; 24.10.2011
comment
Едно последно нещо, тази отмяна е за OnKeyPress като цяло, така че това ще засегне всеки контрол, който имам събитие OnKeyPress? - person sooprise; 24.10.2011
comment
@sooprise OnKeyPress е за потребителската контрола, където сте създали нов DateTimePicker въз основа на наследяване от съществуващата контрола DateTimePicker. Където и да използвате този контрол, събитието KeyPress ще бъде обработено автоматично. Ако не искате това, тогава нямате нужда от персонализирана контрола - просто обработете събитието на контролата във формуляра, както във втория пример. Надявам се това да е ясно. - person LarsTech; 24.10.2011