0

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
}

私が受けるかもしれない助けをありがとう。

4

2 に答える 2

2

あなたが使用している必要があります

System.Windows.Forms.Timer

それ以外の

using System.Timers;

ここここを参照

于 2013-03-18T17:28:17.933 に答える
1

まず、 にはイベントSystem.Timerがありません。代わりに.Tick使用してください:Timer.Elapsed

myTimer.Elapsed += new EventHandler(MyTimer_Tick);

[編集: リストを辞書に置き換えた]

また、複数のタイマーと、タイマーをスコープ内に保持する方法も必要です。Dictiory<DataGridViewRow, Timer>クラス レベルで宣言されたオブジェクトの使用:

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);
}

RowsRemoved イベント ハンドラーで、行インデックスを取得し、timers辞書から削除します。例: timers.RemoveAt(rowIndex)

于 2013-03-18T17:36:30.570 に答える