Ключевые события на текстовом поле, кнопку и индикатор выполнения? - PullRequest
1 голос
/ 19 февраля 2020

У меня есть текстовое поле, кнопка и индикатор выполнения. Я хотел бы, чтобы событие keydown текстового поля находилось с помощью кнопки на индикаторе прогресса, на самом деле я хотел бы, чтобы число, введенное в текстовое поле, стало значением индикатора выполнения, и чтобы в этом случае значение индикатора выполнения увеличивалось. Если бы вы могли дать мне пример кода, это было бы хорошо, спасибо.

    public void button1_Click(object 
    sender,EventArgs e)
    {
    //I don't know.
    }


    public void textbox2_KeyDown(object 
    sender,KeyEventArgs e)
    {
    if(e.KeyCode <= Keys.NumPad0 || 
    e.KeyCode >= Keys.NumPad9) 
    {
     // I don't know !
    }

Ответы [ 3 ]

0 голосов
/ 19 февраля 2020

Как я понял, вы хотите изменить значение индикатора выполнения на основе ввода textBox и обнаружить это изменение. Ну, чтобы получить входные данные из textBox при изменении, есть событие для этого, которое называется: TextChanged

, поэтому при каждом изменении ввода вы сможете захватывать вход. Для индикатора выполнения вы можете изменить значение с помощью свойства: Значение. Подробнее: ProgressBar.Value , поэтому, если ваш элемент управления progressBar назван: progressBar1, измените его на:

progressBar1.Value = 5; // here the value is 5.

Теперь вы можете использовать событие textChanged для установки значения индикатора выполнения, например:

public void textbox2_TextChanged(object sender,KeyEventArgs e)
{
   progressBar1.Value = int.Parse(textBox2.Text); // parse the input to int value. Consider using int.TryParse     
}
0 голосов
/ 19 февраля 2020

Как я понял, вы хотите конвертировать введенное значение в textbox2, становясь значением progressbar, нажав кнопку. В этом случае вам не нужно отслеживать событие KeyDown, а использовать только значение textbox2.

Попробуйте это

public void button1_Click(object sender,EventArgs e)
{
    if (int.TryParse(textbox2.Text, out int value) && value >=0 && value <= 100)
    {
        progressbar.Value = value;
    }
    else progressbar.Value = 0;
}

В случае, если вы хотите отфильтровать нажатые клавиши рассмотрите возможность использовать PreviewKeyDown событие, подобное этому.

public void textbox2_PreviewKeyDown(object sender,KeyEventArgs e)
{
    if ((e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9) && e.KeyCode != Keys.Delete && e.KeyCode != Keys.Back)
    {
        e.Handled = true;
    }
}
0 голосов
/ 19 февраля 2020

При KeyDown захватить значение ключа

int keyValue { get; set; }

private void textbox2_KeyDown(object sender, KeyEventArgs e)
{

  int keyVal = (int)e.KeyValue; keyValue = -1;

  if ((keyVal >= (int)Keys.D0 && keyVal <= (int)Keys.D9))
  {
      keyValue = (int)e.KeyValue - (int)Keys.D0;
  }
  else if (keyVal >= (int)Keys.NumPad0 && keyVal <= (int)Keys.NumPad9)
  {
      keyValue = (int)e.KeyValue - (int)Keys.NumPad0;
  }
}

При нажатии кнопки Увеличить значение ProgessBar

public void button1_Click(object sender,EventArgs e)
{
   //Here Increment the progress bar by keyValue
    progressBar1.Value += keyValue;
}

KeyValues ​​и KeyCodes

...