[제품종류] IEC1000
[개발환경] Visual Studio 2008 C#
=============== 질 문 ===============스마트 버튼을 사용하고 있는데
두개 버튼중 하나가 실행 중일때, 다른 버튼 누르더라도 받은 event를 취소 하고 싶은데요,
현재는 1번 버튼을 눌러 작업을 진행하고 있는데, 도중에 2번 버튼을 누르면 ...
1번 버튼 작업이 끝나고 나서 2번 버튼에대한 작업을 진행합니다.
중간에 누른 2번 event는 받지 않고 싶은데 어떻게 할수있나요?
=============== 답 변 ===============
안녕하세요.
말씀하신 문의 사항을 확인해봤을 때 1번 버튼의 작업이 진행중인 동안 2번 버튼을 눌렀을 때 1번 버튼의 작업이 진행중일 때와 완료되었을 때 2번 버튼에 대한 동작이 실행되지 않도록 하고싶으신 것으로 확인됩니다.
말씀하신 것과 같이 처리하기 위해서는 SmartButton의 Enabled 속성과 SmartTimer를 사용하여 처리해야 합니다.
1번 버튼을 클릭했을 때 2번 버튼의 Enabled를 False로 설정하고 1번 버튼의 작업이 완료되었을 때 SmartTimer를 시작하여
설정한 일정 지연시간 후 2번 버튼의 Enabled를 True로 설정하면 됩니다.
이 때 SmartTimer를 사용해야 하는 이유는 1번 버튼의 작업이 진행되고 있는 도중에 2번 버튼을 클릭하면 Event Queue에 2번 버튼에 대한 Click 이벤트가 들어가게 되는데 1번 버튼의 작업이 진행되고 바로 Enabled를 True로 설정할 경우 2번 버튼이 활성화된 상태에서 이벤트 큐에 있는 2번 버튼의 Click 이벤트가 발생하여 정상적으로 이벤트가 발생하기 때문에 SmartTimer를 사용한 지연시간을 활용해야 합니다.
아래 예시 코드를 작성하여 첨부하였으니 참고해주시기 바랍니다.
[예시 코드]
// Enabled 속성과 SmartTimer를 사용하여 처리
private void btnNumber1Button_Click(object sender, EventArgs e)
{
btnNumber2Button.Enabled = false;
for (int i = 0; i < 10000; i++)
{
smartListBox1.AddItem(i.ToString());
}
ButtonEnable(btnNumber2Button);
}
private void btnNumber2Button_Click(object sender, EventArgs e)
{
SmartX.SmartMessageBox.Show("Button2 코드 실행");
}
private SmartX.SmartButton m_pButtonEnable;
private void ButtonEnable(SmartX.SmartButton pButton)
{
m_pButtonEnable = pButton;
smartTimer1.Interval = 50;
smartTimer1.Start();
}
private void smartTimer1_Tick(object sender, EventArgs e)
{
smartTimer1.Stop();
m_pButtonEnable.Enabled = true;
}
[추가 전달사항]
QnA 문의글을 작성하실 때는 작성자에 반드시 업체명을 기재해주시기 바랍니다.
문의글에 업체정보가 기재되어 있지 않아 몇가지 요청드립니다.
1. 업체명 :
2. 담당자명 :
3. 전화번호 :
요청드린 정보들은 개인정보가 포함되어 있기 때문에 app@smartx.co.kr로 보내주시면 감사하겠습니다.
감사합니다.