C# 为添加到dataGridView的每一行添加一个计时器,并在删除行时将其删除

C# 为添加到dataGridView的每一行添加一个计时器,并在删除行时将其删除,c#,datagridview,timer,C#,Datagridview,Timer,我试图为添加到dataGridView的每一行添加一个计时器,如果删除了一行,则将其删除 由于以下错误,我根本无法运行计时器: “System.Timers.Timer”不包含“Tick”的定义,并且找不到接受“System.Timers.Timer”类型的第一个参数的扩展方法“Tick”(是否缺少using指令或程序集引用?) 当前上下文中不存在名称“myTimer_Tick” 这是我所拥有的一个例子: using System; using System.Collections.Generi

我试图为添加到dataGridView的每一行添加一个计时器,如果删除了一行,则将其删除

由于以下错误,我根本无法运行计时器:

“System.Timers.Timer”不包含“Tick”的定义,并且找不到接受“System.Timers.Timer”类型的第一个参数的扩展方法“Tick”(是否缺少using指令或程序集引用?)

当前上下文中不存在名称“myTimer_Tick”

这是我所拥有的一个例子:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Media;
using System.Data.OleDb;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Timers;

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    System.Timers.Timer myTimer = new System.Timers.Timer();
    myTimer.Interval = 30000;
    myTimer.Tick += new EventHandler(myTimer_Tick);
    myTimer.Enabled = true;
    myTimer.Start();
}

public void MyTimer_Tick(object sender, EventArgs e)
{
    MessageBox.Show("30 seconds scince you added a row");
}

private void dataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
{
    //remove a timer here that corresponds to this row, 
    //if row removed before timer elapsed
}
感谢您对我的帮助。

您应该使用

System.Windows.Forms.Timer
而不是

using System.Timers;
请参见您应该使用的vs

System.Windows.Forms.Timer
而不是

using System.Timers;

首先请参见vs

系统。计时器没有
。勾选
事件。使用
Timer.appeased
代替:

myTimer.Elapsed += new EventHandler(MyTimer_Tick);
[编辑:用字典替换列表]

您还需要多个计时器以及一种使计时器保持在范围内的方法。使用在类级别声明的
dictionary
对象:

private Dictionary<DataGridViewRow, System.Timers.Timer> timers = new Dictionary<DataGridViewRow, System.Timers.Timer>();

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    var myTimer = new System.Timers.Timer();
    myTimer.Interval = 30000;
    myTimer.Elapsed += new ElapsedEventHandler(MyTimer_Tick);
    myTimer.Enabled = true;

    // Potential bug source: If you programmatically add multiple rows at once,
    // a timer is only added to the first row
    timers.Add(dataGridView1.Rows[e.RowIndex], myTimer);
}
private Dictionary timers=new Dictionary();
私有void dataGridView1_RowsAdded(对象发送方,DataGridViewRowsAddedEventArgs e)
{
var myTimer=new System.Timers.Timer();
myTimer.Interval=30000;
myTimer.Appead+=新的ElapsedEventHandler(myTimer_Tick);
myTimer.Enabled=true;
//潜在的错误来源:如果以编程方式一次添加多行,
//计时器仅添加到第一行
添加(dataGridView1.Rows[e.RowIndex],myTimer);
}

现在在RowsRemoved事件处理程序中,您将获得行索引并将其从
计时器
字典中删除;例如,
timers.RemoveAt(rowIndex)
首先,
System.Timer
没有
。勾选
事件。使用
Timer.appeased
代替:

myTimer.Elapsed += new EventHandler(MyTimer_Tick);
[编辑:用字典替换列表]

您还需要多个计时器以及一种使计时器保持在范围内的方法。使用在类级别声明的
dictionary
对象:

private Dictionary<DataGridViewRow, System.Timers.Timer> timers = new Dictionary<DataGridViewRow, System.Timers.Timer>();

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    var myTimer = new System.Timers.Timer();
    myTimer.Interval = 30000;
    myTimer.Elapsed += new ElapsedEventHandler(MyTimer_Tick);
    myTimer.Enabled = true;

    // Potential bug source: If you programmatically add multiple rows at once,
    // a timer is only added to the first row
    timers.Add(dataGridView1.Rows[e.RowIndex], myTimer);
}
private Dictionary timers=new Dictionary();
私有void dataGridView1_RowsAdded(对象发送方,DataGridViewRowsAddedEventArgs e)
{
var myTimer=new System.Timers.Timer();
myTimer.Interval=30000;
myTimer.Appead+=新的ElapsedEventHandler(myTimer_Tick);
myTimer.Enabled=true;
//潜在的错误来源:如果以编程方式一次添加多行,
//计时器仅添加到第一行
添加(dataGridView1.Rows[e.RowIndex],myTimer);
}

现在在RowsRemoved事件处理程序中,您将获得行索引并将其从
计时器
字典中删除;例如,
timers.RemoveAt(rowIndex)

仍然在EventHandler行中向我抛出一个错误。我可以使用myTimer.appeased+=newelapsedeventhandler(myTimer_Tick)来抑制它;如果
集合以某种方式重新排序,您的行集合索引将与
计时器
索引不匹配。作为
字典
集合的键的行引用将不太可能由于索引不匹配而导致冲突。这是事实,我没有想到这一点。允许用户重新排列行,但不允许重新排列列。如何使用Dictionary添加它?这仍然会在EventHandler行中给我带来一个错误。我可以使用myTimer.appeased+=newelapsedeventhandler(myTimer_Tick)来抑制它;如果
集合以某种方式重新排序,您的行集合索引将与
计时器
索引不匹配。作为
字典
集合的键的行引用将不太可能由于索引不匹配而导致冲突。这是事实,我没有想到这一点。允许用户重新排列行,但不允许重新排列列。我该如何使用字典添加它?好的,我已经将它更改为那个,谢谢。它们都产生相同的结果。我无法删除计时器与他们虽然和计时器不断重复。我该怎么停止呢?好的,我把它改成那个了,谢谢。它们都产生相同的结果。我无法删除计时器与他们虽然和计时器不断重复。我该怎么阻止这一切?