Итак, я устанавливаю приложение для набора текста, и есть кнопка паузы, которая останавливает таймер и не позволяет вам печатать, если вы не выйдете из состояния «паузы».Это состояние «пауза» предоставляет вам доступ к 2 другим кнопкам, одна из которых называется «Справка», а другая - ну, он не очень важен для этих вопросов.
Когда я нажимаю «Справка», форма, содержащаяоткрывается некоторая справочная информация, когда я закрываю форму справки, я не могу выйти из состояния паузы, когда нажимаю на кнопку паузы, как будто я потерял фокус или программа не может выйти из кода с кнопки справки (Основные формы не закрываются, когда открываются справочные формы.)
Вот моя кнопка справки
private void btnAide_Click(object sender, EventArgs e)
{
HelpForm fE = new HelpForm();
fE.Visible = true;
this.Activate();
}
Вот что происходит, когда я нажимаю клавишу паузы
case Keys.OemQuestion:
if (bShift)
{ strToucheAppuyee = "°"; }
else
{
if (timer1.Enabled)
{
timer1.Stop();
plPanneauMot.Enabled = false;
btnAide.Enabled = true;
btnCritereMedaille.Enabled = true;
bPause = true;
bPauseTouche = true;
}
else
{
timer1.Start();
plPanneauMot.Enabled = true;
btnAide.Enabled = false;
btnCritereMedaille.Enabled = false;
bPause = false;
bPauseTouche = true;
}
}
И ... Вот мой код для ловли нажатия клавиши
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
try
{
// Colorie les touches selon leur disposition sur le clavier
if (bPause == true)
{
if (e.KeyCode == Keys.OemQuestion)
{
bPause = false;
bPauseTouche = false;
plPanneauMot.Enabled = true;
btnCritereMedaille.Enabled = false;
btnAide.Enabled = false;
timer1.Start();
}
}
else if (bPause == false)
{
bPauseTouche = false;
// Récupère la valeur de chaque touche appuyé ainsi que les trema, circonflexe, majuscule, etc.
switch (e.KeyCode)
{
case Keys.A:
if (bCirconflexe == true && bCapital == true)
{ strToucheAppuyee = "Â"; } // Circonflexe majuscule
else if (bTrema == true && bCapital == true)
{ strToucheAppuyee = "Ä"; } // Trema majuscule
else if (bShift == true || bCapital == true)
{ strToucheAppuyee = "A"; } // Majuscule
else if (bCirconflexe)
{ strToucheAppuyee = "â"; } // Circonflexe minuscule
else if (bTrema)
{ strToucheAppuyee = "ä"; } // Trema minuscule
else
{ strToucheAppuyee = "a"; } // Minuscule
BoolFalse();
break;
case Keys.B:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "B"; } // Majuscule
else
{ strToucheAppuyee = "b"; } // Minuscule
BoolFalse();
break;
case Keys.C:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "C"; } // Majuscule
else
{ strToucheAppuyee = "c"; } // Minuscule
BoolFalse();
break;
case Keys.D:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "D"; } // Majuscule
else
{ strToucheAppuyee = "d"; } // Minuscule
BoolFalse();
break;
case Keys.E:
if (bCirconflexe == true && bCapital == true)
{ strToucheAppuyee = "Ê"; } // Circonflexe majuscule
else if (bTrema == true && bCapital == true)
{ strToucheAppuyee = "Ë"; } // Trema majuscule
else if (bShift == true || bCapital == true)
{ strToucheAppuyee = "E"; } // Majuscule
else if (bCirconflexe)
{ strToucheAppuyee = "ê"; } // Circonflexe minuscule
else if (bTrema)
{ strToucheAppuyee = "ë"; } // Trema minuscule
else
{ strToucheAppuyee = "e"; } // Minuscule
BoolFalse();
break;
case Keys.F:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "F"; } // Majuscule
else
{ strToucheAppuyee = "f"; } // Minuscule
BoolFalse();
break;
case Keys.G:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "G"; } // Majuscule
else
{ strToucheAppuyee = "g"; } // Minuscule
BoolFalse();
break;
case Keys.H:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "H"; } // Majuscule
else
{ strToucheAppuyee = "h"; } // Minuscule
BoolFalse();
break;
case Keys.I:
if (bCirconflexe == true && bCapital == true)
{ strToucheAppuyee = "Î"; } // Circonflexe majuscule
else if (bTrema == true && bCapital == true)
{ strToucheAppuyee = "Ï"; } // Trema majuscule
else if (bShift == true || bCapital == true)
{ strToucheAppuyee = "I"; } // Majuscule
else if (bCirconflexe)
{ strToucheAppuyee = "î"; } // Circonflexe minuscule
else if (bTrema)
{ strToucheAppuyee = "ï"; } // Trema minuscule
else
{ strToucheAppuyee = "i"; } // Minuscule
BoolFalse();
break;
case Keys.J:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "J"; } // Majuscule
else
{ strToucheAppuyee = "j"; } // Minuscule
BoolFalse();
break;
case Keys.K:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "K"; } // Majuscule
else
{ strToucheAppuyee = "k"; } // Minuscule
BoolFalse();
break;
case Keys.L:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "L"; } // Majuscule
else
{ strToucheAppuyee = "l"; } // Minuscule
BoolFalse();
break;
case Keys.M:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "M"; } // Majuscule
else
{ strToucheAppuyee = "m"; } // Minuscule
BoolFalse();
break;
case Keys.N:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "N"; } // Majuscule
else
{ strToucheAppuyee = "n"; } // Minuscule
BoolFalse();
break;
case Keys.O:
if (bCirconflexe == true && bCapital == true)
{ strToucheAppuyee = "Ô"; } // Circonflexe majuscule
else if (bTrema == true && bCapital == true)
{ strToucheAppuyee = "Ö"; } // Trema majuscule
else if (bShift == true || bCapital == true)
{ strToucheAppuyee = "O"; } // Majuscule
else if (bCirconflexe)
{ strToucheAppuyee = "ô"; } // Circonflexe minuscule
else if (bTrema)
{ strToucheAppuyee = "ö"; } // Trema minuscule
else
{ strToucheAppuyee = "o"; } // Minuscule
BoolFalse();
break;
case Keys.P:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "P"; } // Majuscule
else
{ strToucheAppuyee = "p"; } // Minuscule
BoolFalse();
break;
case Keys.Q:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "Q"; } // Majuscule
else
{ strToucheAppuyee = "q"; } // Minuscule
BoolFalse();
break;
case Keys.R:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "R"; } // Majuscule
else
{ strToucheAppuyee = "r"; } // Minuscule
BoolFalse();
break;
case Keys.S:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "S"; } // Majuscule
else
{ strToucheAppuyee = "s"; } // Minuscule
BoolFalse();
break;
case Keys.T:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "T"; } // Majuscule
else
{ strToucheAppuyee = "t"; } // Minuscule
BoolFalse();
break;
case Keys.U:
if (bShift == true && bCirconflexe == true && bCapital == true)
{ strToucheAppuyee = "Ù"; } // Accent grave minuscule
else if (bCirconflexe == true && bCapital == true)
{ strToucheAppuyee = "Û"; } // Circonflexe majuscule
else if (bTrema == true && bCapital == true)
{ strToucheAppuyee = "Ü"; } // Trema majuscule
else if (bShift == true && bCirconflexe == true)
{ strToucheAppuyee = "ù"; } // Accent grave minuscule
else if (bShift == true || bCapital == true)
{ strToucheAppuyee = "U"; } // Majuscule
else if (bCirconflexe)
{ strToucheAppuyee = "û"; } // Circonflexe minuscule
else if (bTrema)
{ strToucheAppuyee = "ü"; } // Trema minuscule
else
{ strToucheAppuyee = "u"; } // Minuscule
BoolFalse();
break;
case Keys.V:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "V"; } // Majuscule
else
{ strToucheAppuyee = "v"; } // Minuscule
BoolFalse();
break;
case Keys.W:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "W"; } // Majuscule
else
{ strToucheAppuyee = "w"; } // Minuscule
BoolFalse();
break;
case Keys.X:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "X"; } // Majuscule
else
{ strToucheAppuyee = "x"; } // Minuscule
BoolFalse();
break;
case Keys.Y:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "Y"; } // Majuscule
else
{ strToucheAppuyee = "y"; } // Minuscule
BoolFalse();
break;
case Keys.Z:
if (bShift == true || bCapital == true)
{ strToucheAppuyee = "Z"; } // Majuscule
else
{ strToucheAppuyee = "z"; } // Minuscule
BoolFalse();
break;
case Keys.D0:
if (bShift)
{ strToucheAppuyee = "="; }
else
{ strToucheAppuyee = "0"; }
BoolFalse();
break;
case Keys.D1:
if (bShift)
{ strToucheAppuyee = "+"; }
else
{ strToucheAppuyee = "1"; }
BoolFalse();
break;
case Keys.D2:
if (bShift)
{ strToucheAppuyee = "\""; }
else if (bAltGr)
{ strToucheAppuyee = "@"; }
else
{ strToucheAppuyee = "2"; }
BoolFalse();
break;
case Keys.D3:
if (bShift)
{ strToucheAppuyee = "*"; }
else if (bAltGr)
{ strToucheAppuyee = "#"; }
else
{ strToucheAppuyee = "3"; }
BoolFalse();
break;
case Keys.D4:
if (bShift)
{ strToucheAppuyee = "ç"; }
else
{ strToucheAppuyee = "4"; }
BoolFalse();
break;
case Keys.D5:
if (bShift)
{ strToucheAppuyee = "%"; }
else
{ strToucheAppuyee = "5"; }
BoolFalse();
break;
case Keys.D6:
if (bShift)
{ strToucheAppuyee = "&"; } // Ne fonctionne pas car elle ne s'affiche pas
else
{ strToucheAppuyee = "6"; }
BoolFalse();
break;
case Keys.D7:
if (bShift)
{ strToucheAppuyee = "/"; }
else if (bAltGr)
{ strToucheAppuyee = "|"; }
else
{ strToucheAppuyee = "7"; }
BoolFalse();
break;
case Keys.D8:
if (bShift)
{ strToucheAppuyee = "("; }
else
{ strToucheAppuyee = "8"; }
BoolFalse();
break;
case Keys.D9:
if (bShift)
{ strToucheAppuyee = ")"; }
else
{ strToucheAppuyee = "9"; }
BoolFalse();
break;
case Keys.Space:
strToucheAppuyee = " ";
BoolFalse();
break;
case Keys.OemPeriod:
if (bShift)
{ strToucheAppuyee = ":"; }
else
{ strToucheAppuyee = "."; }
BoolFalse();
break;
case Keys.Oemcomma:
if (bShift)
{ strToucheAppuyee = ";"; }
else
{ strToucheAppuyee = ","; }
BoolFalse(); ;
break;
case Keys.OemOpenBrackets:
if (bShift)
{ strToucheAppuyee = "?"; }
else
{ strToucheAppuyee = "'"; }
BoolFalse();
break;
case Keys.OemMinus:
if (bShift)
{ strToucheAppuyee = "_"; }
else
{ strToucheAppuyee = "-"; }
BoolFalse();
break;
case Keys.Oem7:
if (bShift)
{ strToucheAppuyee = "ö"; }
else
{ strToucheAppuyee = "é"; }
BoolFalse();
break;
case Keys.Oem5:
if (bShift)
{ strToucheAppuyee = "ä"; }
else if (bAltGr)
{ strToucheAppuyee = "{"; }
else
{ strToucheAppuyee = "à"; }
BoolFalse();
break;
case Keys.Oem1: // è
if (bShift)
{ strToucheAppuyee = "ü"; }
else if (bAltGr)
{ strToucheAppuyee = "["; }
else
{ strToucheAppuyee = "è"; }
BoolFalse();
break;
case Keys.Oem8:
if (bShift)
{ strToucheAppuyee = "£"; }
else if (bAltGr)
{ strToucheAppuyee = "}"; }
else
{ strToucheAppuyee = "$"; }
BoolFalse();
break;
case Keys.OemBackslash:
if (bShift)
{ strToucheAppuyee = ">"; }
else if (bAltGr)
{ strToucheAppuyee = "\\"; }
else
{ strToucheAppuyee = "<"; }
BoolFalse();
break;
case Keys.OemQuestion:
if (bShift)
{ strToucheAppuyee = "°"; }
else
{
if (timer1.Enabled)
{
timer1.Stop();
plPanneauMot.Enabled = false;
btnAide.Enabled = true;
btnCritereMedaille.Enabled = true;
bPause = true;
bPauseTouche = true;
}
else
{
timer1.Start();
plPanneauMot.Enabled = true;
btnAide.Enabled = false;
btnCritereMedaille.Enabled = false;
bPause = false;
bPauseTouche = true;
}
}
BoolFalse();
break;
case Keys.Oemtilde: // Les 2 points, ex : ë
if (bShift)
{
strToucheAppuyee = "!";
BoolFalse();
}
else if (bAltGr)
{ strToucheAppuyee = "]"; }
else
{
BoolFalse();
bTrema = true;
bPasErreur = true;
}
break;
case Keys.Oem6: // ^ Ex : ê
if (bAltGr)
{
strToucheAppuyee = "~";
BoolFalse();
}
else if (bShift)
{
BoolFalse();
bShift = true;
bCirconflexe = true;
bPasErreur = true;
}
else
{
BoolFalse();
bCirconflexe = true;
bPasErreur = true;
}
break;
case Keys.ShiftKey: // Shift
BoolFalse();
bShift = true;
bPasErreur = true;
break;
case Keys.ControlKey: // Ctrl
BoolFalse();
bCtrl = true;
bPasErreur = true;
if (bAlt)
{ bAltGr = true; }
break;
case Keys.Menu: // Alt
BoolFalse();
bAlt = true;
bPasErreur = true;
if (bCtrl)
{ bAltGr = true; }
break;
case Keys.Capital: // Majuscule
BoolFalse();
if (bCapital)
{
bCapital = false;
lblMajActiver.Visible = false;
}
else
{
bCapital = true;
lblMajActiver.Visible = true;
}
bPasErreur = true;
break;
}
// Calcul le nombre de lettre par minute
dblLPMMoyenne = dblLPM * 60 / dblSecondeLPM;
lblLettreMinuteChiffre.Text = Convert.ToString(dblLPMMoyenne = Math.Round(dblLPMMoyenne, 2));
// S'il appuie sur une lettre spécial (Trema, AltGr, Alt, Pause, Shift, etc.) il ne fait rien
if (bPasErreur == true)
{ }
// Sinon il vérifie que la touche est la bonne et la transforme en blanc pour l'effacer mais pas entièrement
else if (strToucheAppuyee == _lettres_liste.ElementAt(iLettreAppuyeeCompteur) && bPause == false)
{
if (iLettreAppuyeeCompteur != iCharCompteur - 1)
{
SwitchCouleur();
}
if (bErreurUnique == false)
{
_nomLabel.ElementAt(iLettreAppuyeeCompteur).ForeColor = System.Drawing.Color.Red;
}
else
{ _nomLabel.ElementAt(iLettreAppuyeeCompteur).ForeColor = System.Drawing.Color.Gray; }
_nomLabel.ElementAt(iLettreAppuyeeCompteur).BackColor = System.Drawing.Color.Transparent;
iLettreAppuyeeCompteur++;
bErreurUnique = true;
dblLPM++;
}
// Si c'est faux il rajoute une erreur et fait en sorte avec bErreurUnique que il ne puisse pas faire faux plus d'une fois à la même lettre
else
{
_nomLabel.ElementAt(iLettreAppuyeeCompteur).ForeColor = System.Drawing.Color.Red;
if (bErreurUnique)
{ iNbErreur++; }
bErreurUnique = false;
lblNombreFauteChiffre.Text = iNbErreur.ToString();
}
// Si le nombre de lettre appuyé est égal au nombre de lettre total, il arrête l'exercice et affiche la suite
if (iLettreAppuyeeCompteur == iCharCompteur || System.IO.File.ReadAllText(@"../../../../../Texte/ExercicePersonnel.txt") == "true" && iLettreAppuyeeCompteur == iCharCompteur - 2)
{
timer1.Stop();
btnResultat.Visible = true;
lblExerciceFini.Visible = true;
for (int i = 0; i <= _nomLabel.Count - 1; i++)
{
if (_nomLabel.ElementAt(i).ForeColor == System.Drawing.Color.Red)
{ }
else
{ _nomLabel.ElementAt(i).ForeColor = SystemColors.ControlText; }
_nomLabel.ElementAt(i).BackColor = SystemColors.ControlDark;
}
}
}
}
catch
{ }
}