Làm sao để Form chỉ xuất hiện một lần?

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Moderators: tungblt, vuathongtin

Post Reply
windowsxp
Thành viên chính thức
Thành viên chính thức
Posts: 42
Joined: Tue 01/12/2009 1:06 pm

Làm sao để Form chỉ xuất hiện một lần?

Post by windowsxp »

Mình viết ứng dụng bằng vb.net, làm thế nào để form đỏ chỉ xuất hiện 1 lần thôi.
Ví dụ: Vào menu chọn "Xuất hàng" để mở form frmxuathang, nếu vào menu mở form đó lần nữa thì cũng chỉ xuất hiện form đã mở mà thôi
Mình đã vào đây: http://www.caulacbovb.com/forum/viewtop ... f=8&t=9620 nhưng vẫn chưa làm được
Mong các bạn hướng dẫn, cảm ơn nhiều./.
User avatar
nhochoclaptrinh
Thành viên danh dự
Thành viên danh dự
Posts: 517
Joined: Sat 28/05/2011 12:10 pm
Has thanked: 15 times
Been thanked: 83 times

Re: Làm sao để Form chỉ xuất hiện một lần?

Post by nhochoclaptrinh »

Có lẽ bạn nên dùng Form.ShowDialog
ngocvinh
Guru
Guru
Posts: 701
Joined: Wed 23/04/2008 8:14 am
Location: Biên Hòa Đồng Nai
Been thanked: 111 times

Re: Làm sao để Form chỉ xuất hiện một lần?

Post by ngocvinh »

Cái này bạn tham khảo cách thao tác trên MDI from mổi lần chỉ mở ra 1 cửa sổ thui trên diẽn đàn có nhiều.http://www.caulacbovb.com/forum/viewtop ... DI#p103970
Tôi dùng ToolStrip1
  1. Private Sub CloseChildFrom() 'hàm đóng form củ
  2.         If Me.MdiChildren.Length > 0 Then
  3.             Me.ActiveMdiChild.Close()
  4.  
  5.         End If
  6.     End Sub
  7.   Private Sub ToolStripButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton2.Click ' mở 1 form khác
  8.  
  9.         CloseChildFrom()
  10.         Dim Admi As New Admin
  11.         Admi.MdiParent = Me
  12.  
  13.         Admi.Show()
  14.         Admi.WindowState = FormWindowState.Maximized
  15.     End Sub
User avatar
dazzlingvit
Guru
Guru
Posts: 960
Joined: Tue 18/01/2011 10:21 am
Location: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 times
Been thanked: 112 times
Contact:

Re: Làm sao để Form chỉ xuất hiện một lần?

Post by dazzlingvit »

windowsxp wrote:Mình viết ứng dụng bằng vb.net, làm thế nào để form đỏ chỉ xuất hiện 1 lần thôi.
Ví dụ: Vào menu chọn "Xuất hàng" để mở form frmxuathang, nếu vào menu mở form đó lần nữa thì cũng chỉ xuất hiện form đã mở mà thôi
Mình đã vào đây: http://www.caulacbovb.com/forum/viewtop ... f=8&t=9620 nhưng vẫn chưa làm được
Mong các bạn hướng dẫn, cảm ơn nhiều./.
Bạn có thể thêm một biến tĩnh (static) kiểu bool (đúng/sai) để xác định xem form đó đã được mở chưa.
Ví dụ:
  1. class MainForm  Form
  2. {
  3.   protected static bool DaMo = false;
  4.  
  5.   // ...
  6. }

Mỗi lần mở form, bạn kiểm tra MainForm.DaMo có bằng false không, nếu là false thì mở form và gán gtrị MainForm là true. Sau đó, bạn bắt sự kiện đóng Form để khi đóng Form, bạn lại gán MainForm.DaMo = false.
  1. protected void Form_FormClosed(object sender, EventArgs e)
  2. {
  3.   DaMo = false;
  4. }
ngocvinh
Guru
Guru
Posts: 701
Joined: Wed 23/04/2008 8:14 am
Location: Biên Hòa Đồng Nai
Been thanked: 111 times

Re: Làm sao để Form chỉ xuất hiện một lần?

Post by ngocvinh »

Làm theo kiểu Form cha con rồi còn gì, mổi lần mở thì kiểm tra đóng cái form con lại mở cái thằng cần chọn ra cửa sổ form cha thôi.
FlyingFox
Guru
Guru
Posts: 833
Joined: Wed 20/04/2011 9:56 am
Been thanked: 326 times

Re: Làm sao để Form chỉ xuất hiện một lần?

Post by FlyingFox »

Với MDI Form thì bạn dùng function này để check coi thữ form mdi child mỡ hay chưa bằng cách kiểm tra bằng tên hiển thị cũa form (form.Text)

  1. Public Function IsFormOpen(ByVal formCaption As String) As Boolean
  2.     For Each childForm In Me.MdiChildren
  3.         If childForm.Text = formCaption Then
  4.             childForm.BringToFront()
  5.             Return True
  6.         End If
  7.     Next
  8.     Return False
  9. End Function


Nếu như bạn muốn mỡ FormXuatHang thì viết như sau:
  1. If Not IsFormOpen("Xuất Hàng") Then
  2.     Dim frm As New FormXuatHang()
  3.     frm.MdiParent = Me
  4.     frm.Show()
  5. End If
windowsxp
Thành viên chính thức
Thành viên chính thức
Posts: 42
Joined: Tue 01/12/2009 1:06 pm

Re: Làm sao để Form chỉ xuất hiện một lần?

Post by windowsxp »

Mình chưa thạo thao tác với form dạng cha/con, form của mình tạo là windows form thì thao tác như thế nào ạ?
ngocvinh
Guru
Guru
Posts: 701
Joined: Wed 23/04/2008 8:14 am
Location: Biên Hòa Đồng Nai
Been thanked: 111 times

Re: Làm sao để Form chỉ xuất hiện một lần?

Post by ngocvinh »

Set thuộc tính lên form chính isMDIcontainer = TRUE làm Form cha hiển nhiên các thèng còn lại là con
Sau đó chọn sự kiện Click trên Menu "bấm đúp vào"
Attachments
MDI.rar
Ví dụ
(57.25 KiB) Downloaded 287 times
hahuuhai
Thành viên năng nổ
Thành viên năng nổ
Posts: 61
Joined: Mon 13/04/2009 8:38 am
Location: Thạch Thành, Thanh Hóa

Re: Làm sao để Form chỉ xuất hiện một lần?

Post by hahuuhai »

Đây là cách của mình (C#)

1. Kiểm tra sự tồn tại
  1. private static bool subFormExisted(Form F)
  2. {
  3.     bool kq = false;
  4.  
  5.     foreach (Form frm in Application.OpenForms)
  6.     {
  7.         if (frm.Name == F.Name)
  8.         {
  9.             kq = true;                 
  10.             goto ExitFor;
  11.         }
  12.     }
  13.  
  14. ExitFor
  15.     return kq;
  16. }


2. Hiển thị:
  1. public static void subShowAnotherForm(Form F)
  2. {
  3.     bool m_Existed = subFormExisted(F);
  4.  
  5.     if (m_Existed)
  6.     {
  7.         Application.OpenForms[F.Name].Activate();
  8.         F.Close();
  9.     }
  10.     else
  11.     {              
  12.         F.Show();
  13.     }
  14. }


3. Sử dụng
  1. private static void ChạyThử()
  2. {
  3.     subShowAnotherForm(new Form2());
  4.     /*
  5.     Form2 f2 = new Form2();
  6.     subShowAnotherForm(f2);
  7.     */
  8. }


4. Ghi chú:
- Quan trọng: nếu chưa có thì hiện ra, mà có rồi thì phải kích hoạt cho cửa sổ đó.
- Với phương thức F.Show();, còn rất nhiều vấn đề nữa phải xử lý. Ở đây, tôi chỉ nói cách đơn giản nhất thôi.
Post Reply

Return to “Visual Basic .NET và C# (VB.NET & C#)”