自动将行插入到DataGrid视图,而不使用Winforms中的计时器



根据文本框中的值更改,将自动在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内连续运行,我多次插入同一行。

有人能帮我取得预期的结果吗?不用定时器就能完成吗?

通常的方法是订阅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中事件的更多信息,我建议您查看learn.microsoft.com上的文档。一般来说,WinForms是事件驱动的,因此习惯这个概念肯定很有用。

如果您想根据TextBox中的更改插入新行,可以使用TextChanged事件。

每次更改文本时,都会调用您的代理人。

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

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

如果您希望在完成编辑文本框时始终将文本框添加为行,使用apropiate事件(Leave maybe(并在其中添加您的行。

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

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
} 

最新更新