2010-06-08 4 views
4

net windows 양식 응용 프로그램. 나는 콤보 상자와 텍스트 상자 및 닫기 창 단추가 있습니다. 이제 콤보 상자 나 텍스트 상자를 변경하고 창 닫기 버튼을 클릭하면 수정 사항을 저장하라는 메시지가 표시됩니다. 변경 사항이없는 경우 (사용자가 응용 프로그램을 실행하면 수정되지 않습니다) 사용자에게 메시지를 표시해서는 안됩니다. 직접 닫아야합니다. 어떻게해야합니까?닫기 전에 확인

답변

1

한 가지 방법은 폼의 멤버 변수로 _changed 또는 그와 비슷한 bool 플래그를 유지하는 것입니다. 그런 다음 TextBox의 TextChanged 이벤트와 ComboBox의 SelectedIndexChanged 이벤트에서 _changed = true로 설정하면됩니다.

그런 다음 양식이 닫히기 직전에 _changed가 true 인 경우 사용자에게 메시지를 표시합니다.

편집 : 양식에 많은 TexBox 컨트롤이 경우 동일한의 TextChanged 이벤트 핸들러에 그들 모두를 연결 할 수

. 그런 다음 TextBox의 텍스트가 변경 되더라도 _changed는 true로 설정됩니다.

그런 다음 여러 ComboBox 컨트롤과 하나의 SelectedIndexChanged 이벤트를 사용하여 동일한 작업을 수행합니다.

실제로 많은 컨트롤을 수동으로 연결하지 않고 양식의 Controls 컬렉션을 반복적으로 루프하는 메서드를 작성하고 각 컨트롤 유형을 적절한 이벤트 처리기에 연결합니다. 그런 다음 새로운 컨트롤을 추가 할 때마다 자동으로 처리되므로 시간과 유지 관리를 많이 절약하기 위해이 방법을 하나 이상의 형식으로 재사용 할 수 있습니다.

+0

감사합니다 ... 그 일 .. 나는 또 다른 의심이있다. 여기에는 텍스트 상자와 콤보 박스 만 있고, 텍스트 상자의 콤보와 TextChanged 이벤트의 SelectedIndexChanged에서 _changed를 true로 만들 것입니다. 더 많은 통제가 있다면 어떨까요? 모든 컨트롤에서 _changed를 true로 설정해야합니까 아니면 해당 컨트롤의 컨트롤에 변경 사항이있을 때 적용 할 수있는 옵션이 있습니까? 제 말은 양식에 적용 할 수 있습니다. 즉, 변경된 사항이있는 경우 _changed는 true 여야합니다. – saeed

+0

귀하의 추가 질문에 따라 답변을 편집했습니다. 내 생각이 가장 도움이된다고 생각하는 투표 방법은? ;) –

4

쉽게 할 수있는 일은 dirty 회원을 양식에 추가하는 것입니다.이 회원은 변경 될 때마다 true으로 설정하고 양식을 닫을 때마다 확인합니다.

4

양식의 OnClosing 메서드를 재정의하거나 Closing 이벤트에 연결하십시오. 핸들러에서 수정 사항을 확인하고 사용자에게 메시지 상자를 표시합니다. 양식을 닫지 않으려면 반환하기 전에 e.Cancel 속성을 false로 설정하십시오.

관련 문제