简体   繁体   English

C#按键-退出程序

[英]C# On keypress - exit program

My program opens a series of forms all over the screen, am I able to code in an escape method, so on typing of the word "test" the program will close? 我的程序在屏幕上打开了一系列表格,我是否可以使用转义方法进行编码,因此在键入单词“ test”时程序会关​​闭吗?

I was looking at the msdn keypress and how they use a switch, would I use something similar to check for the pressed key and if the correct key is pressed, a counter will increment of the correct key presses until, for "test", 4 will be reached, and if the pressed key is incorrect reset the counter and start over until the right order of keys are entered. 我正在查看msdn按键以及它们如何使用开关,我是否会使用类似的方法检查按键是否被按下,如果正确按键被按下,计数器将增加正确按键的计数,直到进行“测试”为止4将到达,并且如果所按的键不正确,则重置计数器并重新开始,直到输入正确的键顺序为止。

I hope that makes sense :P 我希望这是有道理的:P

public partial class TrollFrm : Form
{
    int number = 1; //change to 2 and have the first instance of troll count = number - 1

    System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();

    public TrollFrm()
    {
        InitializeComponent();

        this.Text = "Trololol - Troll Count: " + number;

        startTimer();

    }

    private void TrollFrm_Load(object sender, EventArgs e)
    {
       //this.Enabled = false;
    }

    private void TrollFrm_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
    }

    public void startTimer()
    {
        myTimer.Tick += new EventHandler(createForm);

        //myTimer.Interval = 500;

        myTimer.Start();

    }

    public void createForm(Object myObject, EventArgs myEventArgs)
    {
        Form frm = new TrollChildFrm();

        Random randomX = new Random();

        Random randomY = new Random();

        frm.Text = "Trololol - Troll Count: " + number;

        int xValue;

        int yValue;

        number++;

        if (number % 2 == 0)    //number is even.
        {
            xValue = (Convert.ToInt32(randomX.Next(1, 1920))) + 200;

            yValue = (Convert.ToInt32(randomY.Next(1, 1080))) - 200;
        }

        else    //number is not even.
        {
            xValue = (Convert.ToInt32(randomX.Next(1, 1920))) - 200;

            yValue = (Convert.ToInt32(randomY.Next(1, 1080))) + 200;
        }

        frm.Show();

        frm.Location = new Point(xValue, yValue);

        if (number == 20)
        {
            myTimer.Stop();
        }
    }

It is an implementation you could use for scenario you described (not tested though): 您可以将其用于您所描述的场景(不过未经测试):

int exitKeysCount = 0;
private void TrollFrm_KeyDown(object sender, KeyEventArgs e)
{
    if (exitKeysCount == 0 && e.KeyCode == Keys.T)
        exitKeysCount = 1;
    else if (exitKeysCount == 1 && e.KeyCode == Keys.E)
        exitKeysCount = 2;
    else if (exitKeysCount == 2 && e.KeyCode == Keys.S)
        exitKeysCount = 3;
    else if (exitKeysCount == 3 && e.KeyCode == Keys.T)
        this.Close();
    else exitKeysCount = 0;
}

I assumed TrollFrm is your parent form, if they are all invoked somewhere else replace this.Close() with some function in main program function, also TrollFrm needs focus during key presses. 我假设TrollFrm是您的父窗体,如果它们都在其他地方被调用,请用主程序函数中的某些函数替换this.Close(),并且TrollFrm在按键期间也需要关注。

try this parent on your parent form. 在您的父母表格上尝试这个父母。

 int trollCount = 0;

 private void TrollFrm_KeyDown(object sender, KeyEventHandler e)
 {
     if (trollCount == 0 && e.KeyCode == Keys.T)
       {
            trollCount = 1;
            frm.Text = "Trololol - Troll Count:" + trollCount
       }
     else if (trollCount == 1 && e.KeyCode== Keys.E)
       {
            trollCount = 2;
            frm.Text = "Trololol - Troll Count:" + trollCount
       }
     else if (trollCount == 2 && e.KeyCode== Keys.S)
       {
            trollCount = 3;
            frm.Text = "Trololol - Troll Count:" + trollCount
       }
     else if (trollCount == 4 && e.KeyCode== Keys.T)
       {
            trollCount = 4;
            this.Close();
       }
     else
        trollCount = 0;

tell me if you need anything else. 告诉我您是否还有其他需要。

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

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