ユーザーがテキストボックスに3秒間何も入力していない場合、アクションを実行するためのコード例/アルゴリズムを探しています。イベントが3秒間そこに呼び出されたかどうかを知る方法?
私の風景:テキストボックスにフォーカスがあってもユーザーが3秒間何も書いていない場合は、投稿したいと考えているtextbox
があります。これは可能ですか?
これは明らかです。どんな助けもありがとうございました!
ユーザーがテキストボックスに3秒間何も入力していない場合、アクションを実行するためのコード例/アルゴリズムを探しています。イベントが3秒間そこに呼び出されたかどうかを知る方法?
私の風景:テキストボックスにフォーカスがあってもユーザーが3秒間何も書いていない場合は、投稿したいと考えているtextbox
があります。これは可能ですか?
これは明らかです。どんな助けもありがとうございました!
System.Windows.Forms.Timer
タイマーを設定する必要があります。テキストボックスのテキストが変わるたびに(TextChanged
イベント)、タイマーを再起動して3秒以内に発射する必要があります。タイマーが起動すると、ユーザーが何も入力していない間に3秒が経過したことを意味します。
しかし、これはアプリケーションに代わって非常に奇妙な動作であり、そこにいるすべてのユーザーが高く評価することはほとんどありません。
TextChange
には、テキストボックスの変更のための変数に現在の時刻を格納する1つのイベントを含めることができます。
次に、毎秒発生するTimer
を追加できます。タイマーは、テキストボックスにフォーカスがあるかどうかをチェックし、そうであれば、変数のタイムスタンプが3秒以上経過していれば(おそらくテキストボックスが空であるかどうか)、そうであればsubmitメソッドを呼び出します。
私は既成の例はありませんが、これを達成するためにTimer
を使用できると思います。タイムアウトを3000ミリ秒に設定し、ユーザーがテキストボックスに入力したときにリセットします(TextChangedなどの同等のイベントを使用します)。ではなく、はKeyPressで、右クリックメニューのクリップボードペーストなどでは起動しません)タイマーを無効にして(繰り返し実行しないように)、好きなロジックを実行します。また、テキストボックスにフォーカスがあるかどうかに応じてタイマーを有効/無効にします。
ここでは、ユーザーがマウスを3秒間動かさないとカーソルを非表示にする例を示します。 TextChangeイベントを使用して同様の処理を行う必要があります。
private DispatcherTimer CursorTimer { get; set; }
private DateTime CursorLastMoveTime { get; set; }
void CursorTimer_Tick(object sender, EventArgs e)
{
TimeSpan delta = DateTime.Now.Subtract(this.CursorLastMoveTime);
if (delta.TotalSeconds > 3)
{
CursorTimer.Stop();
Mouse.OverrideCursor = Cursors.None;
}
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
#region Hide/Show cursor over the main window
Mouse.OverrideCursor = Cursors.Arrow;
CursorLastMoveTime = DateTime.Now;
if (CursorTimer.IsEnabled == false)
CursorTimer.Start();
#endregion
}
間隔が3000ミリ秒のタイマーを使用できます。間隔が経過すると、イベントがトリガされ、ユーザーがテキストボックスにテキストを入力すると、カウントがリセットされます。
public partial class Form1 : Form
{
System.Timers.Timer timer;
public Form1()
{
InitializeComponent();
timer = new System.Timers.Timer();
timer.Interval = 3000;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
textBox1.GotFocus += new EventHandler(textBox1_GotFocus);
textBox1.LostFocus += new EventHandler(textBox1_LostFocus);
}
void textBox1_LostFocus(object sender, EventArgs e)
{
timer.Stop();
}
void textBox1_GotFocus(object sender, EventArgs e)
{
timer.Start();
}
void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
timer.Stop();
timer.Start();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
MessageBox.Show("You have not entered text in the last 3 seconds!");
}
}
他の人が述べたように、この例のようにKeyChressではなくTextChangedイベントを選択することをお勧めします。 – Andy0708
テキストボックスにフォーカスがカウントされてから、3秒後に何か他の操作を行うと、それはあなたが求めていることですか? – Yuck
winformsまたはwpfを使用していますか? – Morten
@ Yuck:...ユーザーが3秒以内に何かをやり始めると、他のアクションをキャンセルすることを忘れないでください。 – Piskvor