Làm cách nào để vô hiệu hóa biểu mẫu gốc khi biểu mẫu con đang hoạt động bằng C#?Làm cách nào để vô hiệu hóa biểu mẫu gốc khi biểu mẫu con đang hoạt động?
Trả lời
Bạn đã thử sử dụng Form.ShowDialog() thay vì Form.Show()?
ShowDialog hiển thị cửa sổ của bạn dưới dạng phương thức, có nghĩa là bạn không thể tương tác với biểu mẫu gốc cho đến khi nó đóng.
điều này có ẩn biểu mẫu gốc không? – barlop
@barlop để ẩn biểu mẫu gốc sử dụng 'this.Hide()' trong mã biểu mẫu gốc. – vee
@vee Bạn đã hiểu sai tôi. Tôi đã hỏi tại sao nó dường như ẩn nó (khi tôi không muốn nó). Vấn đề của tôi, đã giải quyết, là http://stackoverflow.com/questions/38171607/c-sharp-winforms-how-can-i-get-the-child-form-in-front-of-parent-form-without này – barlop
Bạn đang gọi số ShowDialog()
hoặc chỉ Show()
trên biểu mẫu con của bạn từ biểu mẫu gốc?
ShowDialog
sẽ "chặn" người dùng tương tác với biểu mẫu được chuyển dưới dạng thông số thành ShowDialog
.
Trong cha mẹ bạn có thể gọi một cái gì đó như:
MyChildForm childForm = new MyChildForm();
childForm.ShowDialog(this);
nơi this
là hình thức mẹ.
Làm việc cho tôi! VB.Net phiên bản này là: 'Công childForm Như New Childformclass' và' childForm.ShowDialog (Me) 'nơi tôi là lớp cha mẹ (hình thức cha mẹ) cảm ơn bạn rất nhiều @Philip –
gì bạn có thể làm, là để đảm bảo thông qua form cha là chủ sở hữu khi hiển thị dưới dạng con:
Form newForm = new ChildForm();
newForm.Show(this);
Sau đó, dưới hình thức trẻ em, thiết lập xử lý sự kiện cho Activated
và Deactivate
sự kiện:
private void Form_Activated(object sender, System.EventArgs e)
{
if (this.Owner != null)
{
this.Owner.Enabled = false;
}
}
private void Form_Deactivate(object sender, System.EventArgs e)
{
if (this.Owner != null)
{
this.Owner.Enabled = true;
}
}
Tuy nhiên, điều này sẽ dẫn đến hành vi thật sự kinh khủng; trong khi bạn sẽ không thể quay lại và tương tác với biểu mẫu gốc ngay lập tức, kích hoạt bất kỳ ứng dụng nào khác sẽ bật nó, và sau đó người dùng có thể tương tác với nó.
Nếu bạn muốn làm cho hình thức con modal, sử dụng ShowDialog
thay vì:
Form newForm = new ChildForm();
newForm.ShowDialog(this);
Bạn cũng có thể xử lý Form_Closed thay vì Form_Deactivate, nếu bạn muốn vô hiệu hóa biểu mẫu gốc cho toàn bộ vòng đời của biểu mẫu con, bất kể các biểu mẫu hoặc ứng dụng nào khác đang được kích hoạt trong thời gian đó. – JamesFaix
Tại sao không chỉ có phụ huynh chờ đợi cho đứa trẻ để đóng. Đây là nhiều hơn bạn cần.
// Execute child process
System.Diagnostics.Process proc =
System.Diagnostics.Process.Start("notepad.exe");
proc.WaitForExit();
-1: Đừng bao giờ dám làm điều đó trong các trình xử lý nhấn/bấm/chuột /. Thông tin: http://stackoverflow.com/questions/470256/process-waitforexit-asynchronously – quetzalcoatl
Câu trả lời này là về QUY TRÌNH, không phải về FORMS. Hữu ích cho ai đó, nhưng không giải quyết được câu hỏi. Nó cũng là một ý tưởng tồi, nếu được thực hiện trên GUI GUI - GUI ứng dụng của bạn sẽ bị khóa cho đến khi quá trình khác trả về - nếu có gì sai, người dùng sẽ phải sử dụng trình quản lý tác vụ để giết ứng dụng của bạn. SỬ DỤNG CẨN THẬN! Hoặc thậm chí tốt hơn: sử dụng một số giải pháp ASYNCHRONOUS, thay vì WaitForExit. – ToolmakerSteve
Trong khi sử dụng childForm.ShowDialog (điều này) sẽ vô hiệu hóa biểu mẫu chính của bạn, nó vẫn trông rất bị vô hiệu hóa. Tuy nhiên, nếu bạn gọi Enabled = false trước ShowDialog() và Enable = true sau khi bạn gọi ShowDialog() thì form chính sẽ giống như nó bị vô hiệu hóa.
var childForm = new Form();
Enabled = false;
childForm .ShowDialog(this);
Enabled = true;
Tôi không thấy làm thế nào điều này có thể làm việc .. khi tôi thử nó ẩn hình thức cha mẹ – barlop
ChildForm child = new ChildForm();
child.Owner = this;
child.Show();
// Trong ChildForm_Load:
private void ChildForm_Load(object sender, EventArgs e)
{
this.Owner.Enabled = false;
}
private void ChildForm_Closed(object sender, EventArgs e)
{
this.Owner.Enabled = true;
}
Form1 frmnew = new Form1();
frmnew.ShowDialog();
Bạn cũng có thể sử dụng mẫu MDIParent con. Đặt mẹ dưới hình thức con như MDI Chánh
Ví dụ
child.MdiParent = parentForm;
child.Show();
Trong trường hợp này chỉ là 1 hình thức sẽ được hiển thị và các hình thức con sẽ đến bên cha mẹ. Hope this helps
của nó đơn giản, sử dụng
Form.ShowDialog();
Thay vào đó
Form.Show();
Trong khi sử dụng Form.ShowDialog()
bạn không thể tương tác với form cha cho đến khi nó đóng cửa.
khi tôi thử nó tôi thấy rằng giấu nó – barlop
@Melodia
Xin lỗi vì đây không phải là mã C# nhưng đây là những gì bạn muốn, bên cạnh dịch này nên được dễ dàng.
Form1
Private Sub Form1_MouseEnter(sender As Object, e As EventArgs) Handles MyBase.MouseEnter
Me.Focus()
Me.Enabled = True
Form2.Enabled = False
End Sub
Private Sub Form1_MouseLeave(sender As Object, e As EventArgs) Handles MyBase.MouseLeave
Form2.Enabled = True
Form2.Focus()
End Sub
Form2
Private Sub Form2_MouseEnter(sender As Object, e As EventArgs) Handles MyBase.MouseEnter
Me.Focus()
Me.Enabled = True
Form1.Enabled = False
End Sub
Private Sub Form2_MouseLeave(sender As Object, e As EventArgs) Handles MyBase.MouseLeave
Form1.Enabled = True
Form1.Focus()
End Sub
Hope this helps
cảm ơn rất nhiều! ý tưởng của bạn là tuyệt vời! tôi chỉ phát hiện ra rằng nó cũng hoạt động bằng cách làm việc với các hình thức-cha mẹ và docking trẻ em với họ. – melodia
Đối với tôi công việc này ví dụ ở đây những gì xảy ra là menu chính sẽ bị vô hiệu khi bạn mở mẫu đăng ký.
frmUserRegistration frmMainMenu = new frmUserRegistration();
frmMainMenu.ShowDialog(this);
Nếu bạn đang cố gắng để mô phỏng một cuộc gọi Form.ShowDialog nhưng KHÔNG chặn bất cứ điều gì (kinda giống như một mẫu Dialog mô phỏng), bạn có thể thử sử dụng Form.Show() và ngay sau khi bạn hiển thị dưới dạng hộp thoại mô phỏng sau đó ngay lập tức vô hiệu hóa tất cả các cửa sổ khác sử dụng một cái gì đó giống như ...
private void DisableAllWindows()
{
foreach (Form f in Application.OpenForms)
if (f.Name != this.Name)f.Enabled = false;
else f.Focus();
}
sau đó, khi bạn đóng "hình thức giả thoại" bạn hãy chắc chắn để gọi ....
private void EnableAllWindows()
{
foreach (Form f in Application.OpenForms) f.Enabled = true;
}
bạn có thể làm t mũ.
Form3 formshow = new Form3();
formshow.ShowDialog();
- 1. jquery để vô hiệu hóa các phần tử biểu mẫu
- 2. Mở biểu mẫu con từ một biểu mẫu con khác và đặt MDI thành biểu mẫu gốc - cách thực hiện?
- 3. AngularJS - Làm thế nào để vô hiệu hóa một biểu mẫu khi nó được gửi?
- 4. Làm cách nào để mở biểu mẫu trong biểu mẫu?
- 5. Làm cách nào để vô hiệu hóa hành động tải trước khi người dùng gửi biểu mẫu?
- 6. "Không thể tạo biểu mẫu. Không có biểu mẫu MDI hiện đang hoạt động" lỗi
- 7. Vô hiệu hóa bảo mật biểu mẫu CakePHP
- 8. Làm cách nào để tạo biểu mẫu không bị vô hiệu hóa khi biểu mẫu khác được hiển thị một cách bình thường?
- 9. Vô hiệu xác thực biểu mẫu trong trình duyệt
- 10. Phần tử biểu mẫu bị vô hiệu không được gửi
- 11. Vô hiệu hóa tự động gửi biểu mẫu trên nút bấm
- 12. jqGrid: Vô hiệu hóa các trường biểu mẫu khi chỉnh sửa
- 13. Cách phát hiện khi biểu mẫu đang được phóng to?
- 14. Hình thức vô hiệu hóa Delphi khi đang tải
- 15. Làm cách nào để vô hiệu hóa tùy chọn biểu mẫu liên hệ cá nhân trong biểu mẫu chỉnh sửa người dùng?
- 16. Làm cách nào để tạo biểu mẫu biểu mẫu trong Windows Forms?
- 17. Biểu mẫu HTML hoạt động ngoại tuyến
- 18. Làm cách nào để tạo biểu mẫu động bằng JavaScript?
- 19. làm cách nào để giữ dữ liệu biểu mẫu sau khi gửi biểu mẫu bằng javascript?
- 20. Phương pháp tốt nhất để gửi các trường biểu mẫu bị vô hiệu hóa trong jQuery?
- 21. Làm cách nào để ghi đè (vô hiệu hóa) hành vi "gửi" của thẻ nút bên trong thẻ biểu mẫu?
- 22. Làm cách nào để tạo biểu mẫu HTML xám?
- 23. Làm thế nào để vô hiệu hóa nút gửi biểu mẫu "a là Ruby on Rails Way"?
- 24. Cách hiển thị Biểu mẫu tách trong biểu mẫu con điều hướng?
- 25. Tắt nút gửi biểu mẫu
- 26. Cách xác định biểu mẫu nào là macro và các hàm nào đang hoạt động khi xem mã Clojure?
- 27. Trường biểu mẫu bị vô hiệu hóa không gửi dữ liệu
- 28. Vô hiệu hóa thay đổi kích thước của biểu mẫu Windows
- 29. Làm cách nào để vô hiệu hóa tác vụ gửi
- 30. Làm thế nào để vô hiệu hóa tất cả <input > bên trong một biểu mẫu với jQuery?
Bạn không thể sử dụng ChildForm.show sau đó Mainform.disable/.hide hoặc bạn đang nói về việc có 2 biểu mẫu hoạt động cùng một lúc và khi biểu mẫu con là (hoạt động để tắt chính) sau đó bật lại (không tập trung) kích hoạt mainforM? –
@DonThomasBoyle: hey người đàn ông, tôi đang tìm chính xác giải pháp mô tả của bạn "có 2 hình thức hoạt động cùng một lúc và khi hình thức con là (hoạt động để vô hiệu hóa chính) sau đó trên (unfocus) kích hoạt lại mainforM" bạn có thể cho tôi một gợi ý làm thế nào để giải quyết điều đó? Tôi đã thử nó với luồng, application.run, vv nhưng không có gì hoạt động. làm thế nào bạn sẽ nhận ra điều này? – melodia