2009-09-23 4 views
2

Winforms에서 사용자가 DropDown의 값을 변경하지 못하도록하는 적절한 방법은 무엇입니까? 사용자에게 저장되지 않은 변경 사항이 있음을 알려주고 싶습니다. 사용자가 이러한 변경 사항을 버리지 않기로 결정한 경우 변경하려는 콤보 상자를 취소하고 싶습니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?WinForms - ComboBox 변경 방지 - DropDownList 모드

나는 e.Cancel 옵션을 전에 보았지만. 하지만 System.Windows.Forms.ComboBox에는 없을 수도 있습니다.

업데이트 : ComboBox는 데이터 입력 양식의 일부가 아닙니다. 네비게이션/필터처럼 사용되고 있습니다. 사용자가 그리드를 변경했습니다. 나는 그들이 메시지를받지 않고 그리드에서 벗어나지 못하도록하고 싶다.

+0

e.Cancel은 이벤트처럼 보입니다. 이벤트를 TextChanged로 구독하고 이벤트 처리기에서 e.Cancel = true로 처리합니다. –

답변

2

나는 완전히 당신의 질문을 이해 모르겠지만, 귀하의 질문에 정말 직접 콤보 관련이없는 것 같다,하지만 원래 값으로 폼을 다시 설정하는 방법에 대해 오히려 때 사용자는 방금 변경 한 내용을 저장하지 않도록 선택합니다.

아마, 사용자는 폼에서 어떤 종류의 데이터 구조 (ORM 개체 또는 DataRow)의 값에서 컨트롤을로드하는 메서드가있을 것입니다. 양식을 원래 (사전 편집 된) 값으로 재설정하는 가장 쉬운 방법은 원래 (변경되지 않은) 데이터 구조로 해당 메소드를 다시 호출하는 것입니다.

업데이트 : 음,이 작업을 수행 할 수있는 간단한 방법은 즉시 저장 또는 취소로 다시 true로 설정 그들은 양식에 아무것도 변경 자마자 false에 콤보 상자의 Enabled 속성을 설정하는 것입니다 변경.

+0

질문에 대한 업데이트를 참조하십시오. – BuddyJoe

+0

+1 할 수 있습니다. – BuddyJoe

1

콤보 변경 이벤트에서 이전 값을 저장하고 사용자에게 프롬프트를 제공하십시오. 그들이 계속하기로한다면 아무것도하지 마라. 취소를 선택하고 변경 내용을 잃지 않으면 선택한 항목을 이전 값으로 설정하십시오.

1

CancelEventHandler 인 콤보 상자의 Validating 이벤트를 사용할 수 있습니다.

MSDN: Control.Validating event

+0

업데이트를 참조하십시오. 유효성 검사 이벤트는 컨트롤을 벗어나려고 할 때만 실행됩니까? – BuddyJoe

+0

예 - 컨트롤에서 포커스를 잃을 때 발생합니다. –