C# 在Winforms中不使用计时器自动将行插入DataGrid视图

C# 在Winforms中不使用计时器自动将行插入DataGrid视图,c#,.net,winforms,C#,.net,Winforms,一行将根据文本框中的值更改自动添加到Winforms的datagridView中 表单中使用文本框(textBox1)输入值。随着值的更改,将在datagridview(dataGridView1)中插入一行 我使用了以下代码来实现相同的功能 private void timer1_Tick(object sender, EventArgs e) { int value; value = Convert.ToInt32(textBox1.Text

一行将根据文本框中的值更改自动添加到Winforms的datagridView中

表单中使用文本框(textBox1)输入值。随着值的更改,将在datagridview(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);
        } 
     } 
我期望得到的结果是在dataGridView1中插入一行

由于代码在计时器timer1中连续运行,我多次插入同一行

有人能帮我得到预期的结果吗?
不使用计时器可以完成吗?

通常的方法是订阅
文本框。TextChanged
事件:

//maybe in the form constructor
textBox1.TextChanged += HandleTextChanged;
然后您需要实现一个方法
HandleTextChanged
,有点像这样(在同一个类中):


有关WinForms中事件的更多信息,我建议您查看。一般来说,WinForms是事件驱动的,因此习惯这个概念肯定很有用。

如果要根据文本框中的更改插入新行,可以使用事件

每次更改文本时都会调用您的委托

private void textbox_TextChanged(object sender, EventArgs e)
{
   // place your code here for adding a row.
}

文本框有许多事件,您可以在设计器中通过单击它并在属性窗口中选择顶部的黄色闪烁来检查这些事件

如果您希望在编辑文本框时始终将文本框添加为行,
使用apropiate事件(可能离开)并将您的行添加到其中。

您可以让计时器事件勾选一次,然后禁用它:

    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
     } 
private void timer1\u勾选(对象发送方,事件参数e)
{
int值;
value=Convert.ToInt32(textBox1.Text);
如果(值==2)
{
字符串[]行1={“值为2”};
dataGridView1.Rows.Add(row1);
} 

timer1.Enabled=false;//这不是一个好的计时器用例。你需要连接到文本框上的
TextChanged
事件。嗨,Moo Juice,我代表文本框只是为了手动输入数据。在我的项目中,我自动获取变量(值)。所以使用“TextChanged event”这不是一个可行的选择,还有别的办法吗?
    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
     }