Автоматическая вставка строк в DataGrid View без использования таймера в Winforms - PullRequest
0 голосов
/ 23 октября 2019

Строка должна автоматически добавляться в datagridView Winforms в соответствии с изменениями значения в текстовом поле.

Текстовое поле (textBox1) используется в форме для ввода значения. При изменении значения строка должна быть вставлена ​​в представление данных (dataGridView1)

Я использовал следующий код для реализации того же самого,

    private void timer1_Tick(object sender, EventArgs e)
    {
        int value;

        value = Convert.ToInt32(textBox1.Text);

        if(value == 2)
        {
            string[] row1 = {"Value is 2"};
            dataGridView1.Rows.Add(row1);
        } 
     } 

Результат, который я ожидалget был одной строкой, вставленной в dataGridView1.

Я получаю одну и ту же строку, вставленную несколько раз, так как код работает постоянно внутри таймера timer1.

Может кто-нибудь помочь мне сполучить ожидаемый результат? Можно ли это сделать без использования таймера?

Ответы [ 4 ]

1 голос
/ 23 октября 2019

Обычный подход заключается в подписке на событие TextBox.TextChanged:

//maybe in the form constructor
textBox1.TextChanged += HandleTextChanged;

Тогда вам потребуется реализовать метод HandleTextChanged, примерно такой (в том же классе):

private void HandleTextChanged(object sender, EventArgs e)
{
    if(int.TryParse(textBox1.Text, out var number))
    {
        if(number == 2)
        {
            string[] newRow = { "Value is 2" };
            dataGridView1.Rows.Add(newRow);
        }
    }
}

Для получения дополнительной информации о событиях в WinForms я предлагаю вам взглянуть на документацию на docs.microsoft.com . Вообще говоря, WinForms управляется событиями , поэтому, безусловно, полезно привыкнуть к этой концепции.

0 голосов
/ 23 октября 2019

Вы можете один раз установить таймер, а затем отключить его:

    private void timer1_Tick(object sender, EventArgs e)
    {
        int value;

        value = Convert.ToInt32(textBox1.Text);

        if(value == 2)
        {
            string[] row1 = {"Value is 2"};
            dataGridView1.Rows.Add(row1);
        } 
        timer1.Enabled = false; //<--disable timer1 once your job is done
     } 
0 голосов
/ 23 октября 2019

Текстовое поле содержит множество событий, которые вы можете просмотреть в конструкторе, щелкнув его и выбрав в окне «Свойства» желтую вспышку вверху.

, если вы хотите всегда добавлять текстовое поле какКогда вы закончите редактирование текстового поля, используйте событие apropiate (возможно, оставьте) и добавьте туда свою строку.

0 голосов
/ 23 октября 2019

Если вы хотите вставить новую строку в соответствии с изменением в TextBox, вы можете использовать TextChanged событие.

Ваш делегат будет вызываться при каждом изменении текста.

private void textbox_TextChanged(object sender, EventArgs e)
{
   // place your code here for adding a row.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...