2011-11-01 48 views
5

Tôi có biểu mẫu hộp thoại tùy chỉnh được thực hiện. Trên đó tôi có một nhãn, hộp văn bản và 2 nút (OK và Cancel). Nó cũng khai báo và định nghĩa quá tải thực hiện các phương thức để truyền danh sách tham số khác nhau.Tại sao ShowDialog luôn trả về DialogResult.Cancel?

Dialog Winform được gọi như sau:

var theDialog := new InputMsgBox; 

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

Dialog Winform execute được định nghĩa như sau:

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; 

Khi thực hiện phương thức trả về lại cho người gọi, nó luôn luôn trả DialogResult.Cancel ngay cả khi bạn bấm vào OKBtn.

Hộp thoại của hộp thoại được đặt tương ứng.

Tôi đã đặt AcceptButton và CancelButton trên biểu tượng Dialog.

Tôi không thể hiểu tại sao phương thức showdialog luôn trả về DialogResult.Cancel.

CẬP NHẬT Sau khi thực hiện một số kiểm tra, tôi phát hiện ra rằng cửa sổ hộp thoại tùy chỉnh khác của tôi hoạt động tốt khi hiển thị bằng cách gọi showdialog = DialogResult.Ok. Vì vậy, tôi đã kiểm tra cả hai người trong số họ để xem liệu có một số khác biệt trong thiết lập thuộc tính của họ và hoàn toàn không có sự khác biệt. Tôi không hiểu. Cảm ơn trước,

Trả lời

8

Tôi đã tìm ra được sự cố của mình. Đây là lý do tại sao Dialog Form luôn trả về Cancel DialogResult. Đối với cửa sổ hộp thoại tùy chỉnh của tôi, tôi cũng đã thực hiện phương thức sự kiện Form_Closing. Rõ ràng, bạn không có một sự kiện mà sẽ nhảy chương trình truy cập trong các bước của nó khi mở một hộp thoại bằng cách sử dụng phương pháp ShowDialog. Vì vậy, nó đã được đóng trước khi nó có cơ hội để đọc DialogResult của nó. Vì vậy, chương trình của tôi chỉ thấy DialogResult mặc định cho Cửa sổ Hộp thoại của tôi.

Khi tôi đã xóa phương thức sự kiện Form_Closing, nó đang hoạt động theo đúng cách.

Thay vì xóa câu hỏi, tôi trả lời câu hỏi và tôi cảm thấy nó sẽ giúp người khác.

5

Bạn nên đặt khác nhau DialogResult - ví dụ, bằng cách thiết lập DialogResult tài sản của AcceptButton của bạn để DialogResult.OK.

Hoặc đặt chương trình theo chương trình, thường trong trình xử lý sự kiện nút.

Tôi tưởng tượng DialogResult.Cancel là mặc định và bạn sẽ không bao giờ thay đổi.

+0

@ Joe Không phải là một trong các nút được cho là để đặt DialogResult biểu mẫu khi bạn nhấp vào nó? Tôi có nút OKBtn (AcceptButton) được đặt thành DialogResult.Ok và nút CancelBtn (CancelButton) được đặt thành DialogResult.Cancel. Tôi đã đi qua thư viện MSDN và đã làm theo ví dụ của họ. Tuy nhiên, nó luôn trả về DialogResult.Cancel. – ThN

Các vấn đề liên quan