C # On нажатие клавиши - выход из программы - PullRequest
1 голос
/ 24 ноября 2011

Моя программа открывает серию форм по всему экрану, могу ли я кодировать методом escape, поэтому при вводе слова "тест" программа закроется?

Я смотрел нанажатие клавиши msdn и то, как они используют переключатель, буду ли я использовать что-то подобное для проверки нажатой клавиши, и если нажата правильная клавиша, счетчик будет увеличивать количество нажатий правильных клавиш до тех пор, пока для «теста» не будет достигнуто значение 4, иесли нажата неправильная клавиша, сбросьте счетчик и начните сначала, пока не будет введен правильный порядок клавиш.

Надеюсь, это имеет смысл: 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();
        }
    }

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Это реализация, которую вы можете использовать для сценария, который вы описали (но не тестировали):

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

Я предполагал, что TrollFrm - ваша родительская форма, если они все вызываются где-то еще, замените this.Close () на некоторую функцию в основной функции программы, также TrollFrm нуждается в фокусе во время нажатия клавиш.

0 голосов
/ 24 ноября 2011

попробуйте этого родителя в родительской форме.

 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;

скажи мне, если тебе нужно что-нибудь еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...