사용자가 텍스트 상자에 3 초 동안 아무것도 입력하지 않은 경우 작업을 수행하는 코드 예제/알고리즘을 찾고 있습니다.이벤트가 3 초 동안 거기에서 호출되었는지 어떻게 알 수 있습니까?
내 풍경 : 텍스트 상자에 포커스가 있지만 사용자가 3 초 동안 아무 것도 쓰지 않은 경우 제출할 textbox
있습니다. 이것이 가능한가?
분명히하는 것이 좋겠습니다. 어떤 도움이라도 미리 감사드립니다!
사용자가 텍스트 상자에 3 초 동안 아무것도 입력하지 않은 경우 작업을 수행하는 코드 예제/알고리즘을 찾고 있습니다.이벤트가 3 초 동안 거기에서 호출되었는지 어떻게 알 수 있습니까?
내 풍경 : 텍스트 상자에 포커스가 있지만 사용자가 3 초 동안 아무 것도 쓰지 않은 경우 제출할 textbox
있습니다. 이것이 가능한가?
분명히하는 것이 좋겠습니다. 어떤 도움이라도 미리 감사드립니다!
System.Windows.Forms.Timer
타이머를 설정해야합니다. 텍스트 상자의 텍스트가 바뀔 때마다 (TextChanged
이벤트) 타이머를 3 초 후에 다시 시작해야합니다. 타이머가 실행되면 사용자가 아무 것도 입력하지 않은 상태에서 3 초가 경과 한 것입니다.
그러나 이것은 응용 프로그램을 대신하여 매우 이상한 행동이며, 다른 사용자가 이해할 수 없을 가능성이 매우 적습니다.
TextChange
에 텍스트 상자를 변경하면 현재 시간을 변수에 저장할 수 있습니다.
그런 다음 매 초마다 Timer
을 추가 할 수 있습니다. 타이머는 텍스트 상자에 포커스가 있는지 확인할 수 있으며, 변수에 타임 스탬프가 3 초 이상 남아있는 경우 (그리고 텍스트 상자가 비어있는 경우), 제출 된 경우 제출 메서드를 호출합니다.
기성품 예제가 없지만 이것을 달성하기 위해 Timer
을 사용할 수 있다고 생각합니다. 제한 시간을 3000ms로 설정하고 사용자가 텍스트 상자에 입력 할 때 다시 설정하십시오 (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!");
}
}
다른 사람들이 언급했듯이,이 예제에서와 같이 TextChanged 이벤트가 KeyPress보다는 더 나은 선택임을 알려드립니다. – Andy0708
텍스트 상자에 포커스가 시작되면 3 초 후에 다른 작업을 수행합니까? 네가 묻고있는거야? – Yuck
winforms 또는 wpf를 사용하고 있습니까? – Morten
@ Yuck : ... 사용자가 3 초 내에 작업을 시작하면 다른 작업을 취소하는 것을 잊지 마십시오. – Piskvor