2012-01-12 4 views
2

사용자가 텍스트 상자에 3 초 동안 아무것도 입력하지 않은 경우 작업을 수행하는 코드 예제/알고리즘을 찾고 있습니다.이벤트가 3 초 동안 거기에서 호출되었는지 어떻게 알 수 있습니까?

내 풍경 : 텍스트 상자에 포커스가 있지만 사용자가 3 초 동안 아무 것도 쓰지 않은 경우 제출할 textbox 있습니다. 이것이 가능한가?

분명히하는 것이 좋겠습니다. 어떤 도움이라도 미리 감사드립니다!

+3

텍스트 상자에 포커스가 시작되면 3 초 후에 다른 작업을 수행합니까? 네가 묻고있는거야? – Yuck

+0

winforms 또는 wpf를 사용하고 있습니까? – Morten

+0

@ Yuck : ... 사용자가 3 초 내에 작업을 시작하면 다른 작업을 취소하는 것을 잊지 마십시오. – Piskvor

답변

2

System.Windows.Forms.Timer 타이머를 설정해야합니다. 텍스트 상자의 텍스트가 바뀔 때마다 (TextChanged 이벤트) 타이머를 3 초 후에 다시 시작해야합니다. 타이머가 실행되면 사용자가 아무 것도 입력하지 않은 상태에서 3 초가 경과 한 것입니다.

그러나 이것은 응용 프로그램을 대신하여 매우 이상한 행동이며, 다른 사용자가 이해할 수 없을 가능성이 매우 적습니다.

3

TextChange에 텍스트 상자를 변경하면 현재 시간을 변수에 저장할 수 있습니다.

그런 다음 매 초마다 Timer을 추가 할 수 있습니다. 타이머는 텍스트 상자에 포커스가 있는지 확인할 수 있으며, 변수에 타임 스탬프가 3 초 이상 남아있는 경우 (그리고 텍스트 상자가 비어있는 경우), 제출 된 경우 제출 메서드를 호출합니다.

2

기성품 예제가 없지만 이것을 달성하기 위해 Timer을 사용할 수 있다고 생각합니다. 제한 시간을 3000ms로 설정하고 사용자가 텍스트 상자에 입력 할 때 다시 설정하십시오 (TextChanged 또는 이와 동등한 이벤트 인 이 아니며이 아니고 마우스 오른쪽 버튼 메뉴 클립 보드 붙여 넣기 등을 실행하는 KeyPress 만 해당). 타이머 처리기 , 반복적으로 발사하지 않도록 타이머를 비활성화하고 원하는 논리를 수행하십시오. 또한 텍스트 상자에 포커스가 있는지 여부에 따라 타이머를 활성화/비활성화합니다.

1

다음은 사용자가 마우스를 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 
     } 
1

간격이 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!"); 
    } 
} 
+0

다른 사람들이 언급했듯이,이 예제에서와 같이 TextChanged 이벤트가 KeyPress보다는 더 나은 선택임을 알려드립니다. – Andy0708

관련 문제