Windows Forms의 사용자 정의 대화 상자에서 값을 반환하는 표준 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/36984

  •  09-06-2019
  •  | 
  •  

문제

그래서 지금 내 프로젝트에는 사용자에게 생일을 알리는 등의 작업을 수행하는 몇 가지 사용자 정의 대화 상자가 있습니다.지금 그들은 단지 설정과 같은 일을 하고 있습니다. this.Birthday 답변을 얻은 후 속성(이 유형은 DateTime?, null은 "취소"를 나타냄).그러면 호출자가 검사를 합니다. Birthday 사용자가 대답한 내용을 파악하기 위해 생성된 대화 상자의 속성입니다.

내 질문은, 이런 일을 하기 위한 좀 더 표준적인 패턴이 있나요? 우리가 설정할 수 있다는 걸 알아요 this.DialogResult 기본적인 확인/취소 항목의 경우 Windows Forms에 "여기에 내가 수집한 데이터가 있습니다"라고 표시하는 보다 일반적인 방법이 있습니까?

도움이 되었습니까?

해결책

사용자 정의 대화 상자에 속성을 노출하는 것이 표준 대화 상자(예: Select/OpenFileDialog)에서 수행하는 방식이기 때문에 관용적인 방법이라고 말하고 싶습니다.누군가는 찾고 있는 결과를 반환하는 ShowBirthdayDialog() 메서드를 갖는 것이 더 명시적이고 의도를 드러내는 것이라고 주장할 수 있지만 프레임워크의 패턴을 따르는 것이 아마도 현명한 방법일 것입니다.

다른 팁

이런 일을 하기 위한 좀 더 표준적인 패턴이 있나요?

아니요, 올바른 접근 방식을 사용하고 있는 것 같습니다.

대화 상자가 DialogResult.OK를 반환하는 경우 대화 상자에 필요한 모든 속성이 유효하다고 가정합니다.

나에게는 표준 대화 상자 응답을 반환하는 대화 상자를 고수한 다음 속성을 통해 결과에 액세스하는 것이 좋습니다.

내가 앉아 있는 두 가지 좋은 이유:

  1. 일관성 - 대화를 통해 항상 동일한 작업을 수행하며 질문의 성격 자체가 패턴이 좋다는 것을 암시합니다(-:마찬가지로 문제는 이것이 좋은 패턴인지 여부입니다.
  2. 대화 상자에서 여러 값을 반환할 수 있습니다. 여기에서도 완전히 새로운 논의가 있지만 적용된 실용주의는 이것이 어떤 상황에서는 원하는 것임을 의미합니다. 값을 다시 전달할 수 있도록 값을 패키지화하는 것이 항상 적절하거나 바람직하지는 않습니다. 한 번에.

논리의 흐름도 좋습니다.

if (Dialog == Ok)
{
    // Do Stuff with the entered values
}
else
{
    // Respond appropriately to the user cancelling the dialog
}

좋은 질문입니다. 우리는 이와 같은 질문을 해야 합니다. 하지만 나에게는 현재 패턴이 괜찮은 것입니다.

머프

모달 입력 대화 상자의 경우 일반적으로 ShowDialog를 오버로드하고 필요한 데이터에 대한 매개변수를 전달합니다.

DialogResult ShowDialog(out datetime birthday)

나는 일반적으로 내 속성을 Form 클래스가 노출하는 100개 이상의 속성과 혼합하는 것보다 발견하고 이해하는 것이 더 쉽다는 것을 알았습니다.

양식의 경우 일반적으로 읽기 전용 속성을 사용하여 데이터를 전달하는 컨트롤러와 IView 인터페이스가 있습니다.

나는 항상 당신이 설명하는 방식대로 정확하게 해왔습니다.좀 더 수용 가능한 접근 방식이 있는지 궁금합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top