因此,我正在设置一个键入应用程序,并且有一个暂停键可以停止计时器并阻止您键入,除非您退出“暂停”状态。 此“暂停”状态可让您访问另外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
{ }
}
答案 0 :(得分:0)
如果我理解您的说法是正确的,那么您正在捕捉主要形式上的按键。
因此,这就是为什么您在打开帮助表格后致电this.Activate()
。
但是,一旦用户在帮助表单上执行任何操作,只需单击它,主表单就会失去焦点。
因此,您需要将主表单的句柄传递给帮助表单,并且在关闭帮助表单时,可以使用此句柄重新激活主表单。
在您的帮助表格中,编写如下的构造函数
private Form _mainForm = null;
public HelpForm(Form mainForm)
{
InitializeComponent();
_mainForm = mainForm;
}
// subscribe to the FormClosed event, and use this code
private void HelpForm_FormClosed(object sender, FormClosedEventArgs e)
{
if (_mainForm != null)
_mainForm.Activate();
)
现在在您的主窗体中这样称呼
private void btnAide_Click(object sender, EventArgs e)
{
HelpForm fE = new HelpForm(this);
fE.Visible = true;
this.Activate();
}
编辑
另一种可能有用的方法是每次停用帮助表单时激活主表单
// subscribe to the Deactivate event on the help form
private void FormBase_Deactivate(object sender, EventArgs e)
{
if (_mainForm != null)
_mainForm.Activate();
}
答案 1 :(得分:0)
关闭帮助窗口时,将命令“ .Focus()”添加到暂停控件。