2009-07-14 32 views
10

C#/.NET 3.5/WinFormsHộp thoại phương thức từ một hộp thoại phương thức - cả hai đều đóng khi thứ hai bị đóng - tại sao?

Tôi có biểu mẫu mở biểu mẫu hộp thoại phương thức mở ra một dạng hộp thoại khác. Biểu mẫu hộp thoại bên trong có các nút OK và Cancel và AcceptButton và CancelButton của nó được đặt tương ứng.

Khi tôi nhấn Enter hoặc bấm OK trong hộp thoại bên trong, hộp thoại bên ngoài cũng đóng. Tôi không thể nhìn thấy nơi tôi đang làm điều này - là hành vi mong đợi này?

Tôi có thể cung cấp mã nhưng tôi không muốn làm lộn xộn việc này.

+0

Hộp thoại bên ngoài có hoạt động bình thường không [thông qua .ShowDialog]? Bạn sẽ có thể đặt một điểm dừng sau cuộc gọi trong trình gỡ lỗi. Nhưng tôi đoán bạn sẽ không hỏi nếu không có một số tinh tế với những gì bạn đang làm ... –

+0

Vâng, tôi đã bước qua mã nhưng nó chỉ xuất hiện từ bên trong đến bên ngoài mà không đánh bất cứ điều gì. – serialhobbyist

Trả lời

17

Điều này xảy ra do cuộc gọi ShowDialog cũng sửa đổi trạng thái của chủ sở hữu.

Để ngăn chặn điều này xảy ra, bạn cần phải thiết lập lại DialogResult của hộp thoại modal đầu tiên DialogResult.None sau ShowDialog cuộc gọi vào hộp thoại thứ hai:

private void Button1_Click(object sender, EventArgs e) 
{ 
    InnerDialog inner = new InnerDialog() 
    DialogResult innerResult = inner.ShowDialog(this); 
    this.DialogResult = DialogResult.None; 
} 

Đây là một vấn đề lâu dài (xem this bài đăng).

+0

Đó là nó. Tôi đã có một cảm giác tôi đã đánh nó trước một thời gian dài nhưng tôi không thể tìm thấy nó và Google đã không giúp đỡ. Đã giải quyết được sự cố. Cảm ơn rất nhiều. – serialhobbyist

+0

Có thể điều này đã được sửa? Tôi có .Net 3.5 SP1 và làm * NOT * xem hành vi này. – NascarEd

+0

Có thể như vậy. Tôi đã thử nó trên .Net 3.5 SP1 và không nhận được hành vi. Tôi chắc chắn đã có nó trên. Net 2.0 mặc dù. – adrianbanks

0

Tôi đã vật lộn với điều này cả ngày cho đến khi tôi tìm thấy bài đăng này. Nó chưa được sửa trong .NET 4.

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