简体   繁体   English

当同一个表单打开另一个表单时,如何关注表单?

[英]How to have focus on a form when this same form open another form?

So, i'm setting a typing application, and there's a pause key that stop a timer and prevent you from typing unless you exit the "pause" state. 因此,我正在设置一个打字应用程序,并且有一个暂停键可以停止计时器并阻止您输入,除非您退出“暂停”状态。 This "pause" state grant you access to 2 other buttons, one called "Help" and the other one, well he isn't very important for this questions. 这种“暂停”状态允许您访问另外两个按钮,一个名为“帮助”,另一个按钮,这对于这个问题并不是很重要。

When I click on "Help" a form containing some help informations open, when i closed the help form, i can't exit the pause state when i press on the pause button, it's like i've lost the focus or the program can't exit the code from the help button (The main forms doesn't close when the help forms open.) 当我点击“帮助”打开包含一些帮助信息的表单时,当我关闭帮助表单时,当我按下暂停按钮时,我无法退出暂停状态,这就像我失去焦点或程序可以从帮助按钮退出代码(当帮助表单打开时,主窗体不会关闭。)

Here's my help button 这是我的帮助按钮

private void btnAide_Click(object sender, EventArgs e)
       {
           HelpForm fE = new HelpForm();
           fE.Visible = true;
           this.Activate();

       }

Here's what happen when I hit the pause key 这是我点击暂停键时发生的事情

 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;
                                }
                            }

And... Here's my code for catching key stroke 而且......这是我捕捉击键的代码

 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
            { }

        }

If I understand you correct, you are catching key strokes on your main form. 如果我理解你是正确的,那么你正在主表格上抓住击键。
So that is why you call this.Activate() after opening the help form. 这就是为什么在打开帮助表单后调用this.Activate()原因。

However, once the user does anything at the help form, just clicking on it, the main form will lose focus. 但是,一旦用户在帮助表单上执行任何操作,只需单击它,主表单就会失去焦点。

So you need to pass a handle to your main form to the help form, and when closing the help form you can use this handle to re-activate the main form. 因此,您需要将主窗体的句柄传递给帮助表单,关闭帮助表单时,您可以使用此句柄重新激活主窗体。

in your help form, write a constructor like this 在您的帮助表单中,编写这样的构造函数

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();  
)

now in your mainform call it like this 现在在你的mainform中这样称呼它

private void btnAide_Click(object sender, EventArgs e)
{
    HelpForm fE = new HelpForm(this);
    fE.Visible = true;
    this.Activate();
}

EDIT 编辑
Another method that could help is Activating the main form, every time the help form gets deactivated 每次帮助表单被取消激活时,另一种可能有用的方法是激活主表单

// subscribe to the Deactivate event on the help form
private void FormBase_Deactivate(object sender, EventArgs e)
{
     if (_mainForm != null)
        _mainForm.Activate();  
}

关闭帮助窗口时,将命令“.Focus()”添加到暂停控件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM