2014-04-04 1 views
3

Прежде всего, привет всем, потому что это мой первый пост.Не обнаружающий ключ-побег C#

Я новичок в C#, поэтому может быть, что решение очевидно.

У меня есть datagridview с именами и датами. При двойном щелчке по столбцу даты отображается датапиксель для выбранной даты. Если выбрано Escape, datetimepicker скрыт и старые данные вступают в силу. Когда код запущен, и если я дважды щелкнуть по столбцу даты в последней строке, появится datetimepicker, но вы не сможете его прочитать. Если то же самое выполняется в некоторой строке до последнего, esc работает нормально. Если то же самое делается сначала в какой-то другой строке, а затем в последней строке, снова работает esc. Единственная проблема заключается в том, что datetimepicker активируется сначала в последней строке. Также стенд для Ввод

Используется для считывания и ключ DateTimePicker обработки

private void dateTimePicker1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) { CellAddValue(1, dateTimePicker1.Value); } 
    if (e.KeyCode == Keys.Escape) { CellAddValue(1, dateWhenSelDate); } 
} 

public void CellAddValue(int o, DateTime date) 
{ 
    string dateString = date.ToString(dateFormat); 
    if (DateTime.Compare(date, dateTimePicker1.MinDate) == 0) { dateString = ""; } 
    dataGridView1.Rows[selectedRow].Cells[selectedColumn].Value = dateString; 
    if (o == 1) 
    { 
     dateTimePicker1.Hide(); 
     dataGridView1.Focus(); 
    } 
} 

Есть некоторые параметры или параметры, которые я должен установить, чтобы быть в состоянии работать? Благодаря

ответ

3

Думаю, что это беспроигрышная форма заявки

Посмотрите Form.KeyPreview

Вы должны установить

From.KeyPreview = true; 
+0

Благодарим за помощь. Это не решило проблему. Я все еще не знаю, почему так. Мне это удается по-другому. Datagrid был родителем для datetimepicker. Изменив это и отрегулировав положение подборщика, я получаю тот же эффект. – Djansr

+0

Я обнаружил, что не могу обнаружить Escape (по любому методу), пока работает Photoshop (CS2). – TaW

0

Чтобы получить детальный контроль над всеми нажатиями клавиш Вы можете перезаписать метод ProcessCmdKey вашей формы, таким образом вы перехватите ВСЕ ключевые события:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    string keyName = keyData.ToString(); // You might rather use the Keys. enum 

    if ("Escape".Equals(keyName)) 
    { 
     Action(); 
     return true; // If you return true the key event won't be treated any further 
    } 
    else // pass the key on to your forms, they will be treated as if this method wasn't here 
    { 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

Я обычно использую это с

formInstance.KeyPreview = true; 

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.processcmdkey%28v=vs.110%29.aspx

Смежные вопросы