2011-11-01 3 views
5

사용자 정의 대화 상자 winform이 있습니다. 그것에 레이블, 텍스트 상자 및 2 개의 단추 (확인 및 취소)가 있습니다. 또한 오버로드 된 을 선언하고 다른 매개 변수 목록을 전달하기위한 메서드를 실행합니다.왜 ShowDialog는 항상 DialogResult.Cancel을 반환합니까?

var theDialog := new InputMsgBox; 

if theInputB.Execute('Awesome StackOverflow','Enter Text?',s,var s) = DialogResult.OK then 
begin 
    Invalidate; 
    SetText(s); 
end; 

대화의 WinForm는 다음과 같이 정의된다 실행하여 다음과 같이

대화의 WinForm이라고합니다

method InputMsgBox.Execute(Title, theMessage, defaultanswer:string;var thevalue:string): DialogResult; 
begin 
    result := DialogResult.Cancel; 

    Requesttext.Text:=themessage; 
    Requesttext.Enabled:=true; 
    Requesttext.Visible:=true; 
    InputTextBox.Text:=defaultanswer; 
    InputTextBox.Enabled:=true; 
    InputTextBox.Visible:=true; 

    CancelBtn.Enabled:=true; 
    CancelBtn.Visible:=true; 
    Okbtn.Enabled:=true; 
    Okbtn.Visible:=true; 

    self.ShowDialog; 
    Result := self.DialogResult; 
    thevalue:=InputTextBox.Text; 
end; 

방법을 실행 호출자에게 반환 항상 DialogResult.Cancel 때에도을 반환 OKBtn을 클릭합니다.

버튼 대화 상자 결과가 이에 따라 설정됩니다.

대화 상자 winform에 AcceptButton 및 CancelButton을 설정했습니다.

showdialog 메서드가 항상 DialogResult.Cancel을 반환하는 이유를 알 수 없습니다.

UPDATE 몇 가지 테스트를 한 후 showdialog = DialogResult.Ok를 호출하여 표시 할 때 다른 맞춤 대화 상자 창이 잘 작동한다는 것을 알았습니다. 그래서, 둘 다 그들의 속성 설정에 약간의 차이가 있는지 확인하고 절대적으로 차이가 없는지 확인했습니다. 나는 그것을 이해하지 못한다. 사전에 감사합니다,

답변

8

문제점을 파악했습니다. 이것이 Dialog Form이 항상 DialogResult Cancel을 반환 한 이유입니다. 맞춤 대화창에서 Form_Closing 이벤트 메소드도 구현했습니다. 분명히 ShowDialog 메서드를 사용하여 대화 상자를 열 때 프로그램 카운터를 해당 단계에서 건너 뛰는 이벤트가 발생하지 않아야합니다. DialogResult를 읽을 기회가 있기 전에 이미 닫혔습니다. 따라서, 내 프로그램은 내 대화 상자 창에 대한 기본 DialogResult 보았다.

일단 Form_Closing 이벤트 메서드를 제거하면 예상대로 작동합니다.

질문을 삭제하는 대신 대답하고 다른 사람들에게 도움이 될 것이라고 생각합니다.

5

당신은 다른 DialogResult 설정해야합니다 - 예를 들어, AcceptButtonDialogResult 속성을 설정하여 DialogResult.OK에 있습니다.

버튼 식 이벤트 처리기에서 프로그래밍 방식으로 설정하는 경우가 많습니다.

나는 DialogResult.Cancel이 기본값이며 변경하지 않는다고 상상해보십시오.

+0

@ Joe 클릭 할 때 DialogResult 형식을 설정해야하는 버튼 중 하나가 아닙니까? OKBtn 버튼 (AcceptButton)을 DialogResult.Ok로 설정하고 CancelBtn 버튼 (CancelButton)을 DialogResult.Cancel로 설정했습니다. 나는 MSDN 라이브러리를 살펴본 후 그들의 예를 따랐다. 그래도 항상 DialogResult.Cancel을 반환합니다. – ThN

관련 문제