30/09/2018, 16:30

Tắt 1 form mà form được new trong form không bị tắt theo

Cho em hỏi là new em có 1 Form a, trong Form a em new thêm 1 form b.
khi em tắt Form a thì form b của em cũng bị tắt theo. vậy em phải làm sao để khi tắt Form a thì Form b vẫn không bị tắt.
làm tương tự với Form b cũng vậy. (trong Form b lại new 1 Form mới).
Em xin cảm ơn.

Nguyễn Minh Dũng viết 18:39 ngày 30/09/2018

Hmm, đang tính google thì nghĩ lại. Về mặt thiết kế, Đạt nghĩ là @nhoxshockq8 không nên cho phép tắt form A trong khi form B vẫn còn chạy.

nhoxshockq8 viết 18:40 ngày 30/09/2018

Em đang nghĩ là làm 1 chương trình sticky note y chang windows. mà trong windows lại có chức năng New 1 sticky note khác mà tắt cái sticky note đầu thì cái sticky note được New cũng không bị xoá.
Đó là lý do em đặt câu hỏi trên Group. (e thử lên mạng tìm mà không ra nên mới đặt câu hỏi @@)

Nguyễn Minh Dũng viết 18:33 ngày 30/09/2018

Thử set parent cho form mới bằng NULL xem. (tức là parent của form mới là desktop)

cc: @tuancoi2506, @dangh

nhoxshockq8 viết 18:36 ngày 30/09/2018

newForm.MdiParent = null;

em set nhưng nó vẫn không được @@

nhoxshockq8 viết 18:38 ngày 30/09/2018

Có 1 điều em thấy lạ là khi Form b được new từ Form a (Form chính) thì các Form được New từ Form b khi xoá Form b thì các Form con của nó đều không bị xoá theo.
Anh Đạt giải thích giúp em với . @@

Phạm Hoàng Tuấn viết 18:41 ngày 30/09/2018

Trong hàm Main trong file .cs e sửa lại hàm Main như sau :

 [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 form = new Form1();
            form.Show();
            Application.Run();
        }

Với Form1 là form chính, trong Form 1 e new 1 form mới, sau đó thử đóng form 1 xem form mới có bị k nhé .

nhoxshockq8 viết 18:32 ngày 30/09/2018

e đã thử và kết quả là khi tắt Form b (ở trong code a ghi là Form form) thì form chính sẽ tắt theo.
với lại ý e không phải là ngay từ ban đầu có 2 cái Form liền. Mà ý em là làm giống với Sticky Note của windows 7 / 8 / 8.1 khi tạo thêm 1 cái Sticky Note mới thì khi tắt cái Sticky Note đầu tiên thì các Sticky Note được tạo bởi Sticky Note đầu tiên cũng không bị tắt theo đó a.

Phạm Hoàng Tuấn viết 18:42 ngày 30/09/2018

A chưa hiểu ý e lắm, vì ban đầu a có cảm giác ý e là form chính (form đầu tiên hiển thị sẽ là 1 cái Sticky Note đầu tiên), từ đó có thể click để tạo 1 sticky mới, thì e làm như cách a fai OK chứ, a đã làm thử rồi mà. Bây giờ ở dưới a lại thấy e viết giống như là sẽ có 1 form chính (form này k fai là 1 Sticky Note ), sau đó từ đó mới fat sinh ra các Sticky Note.

A upload code của a lên mediafire, theo ý 1 của e, trong đó có 2 form, đầu tiên form 1 hiện ra, e cllick vào button, form 2 sẽ hiện ra, e close form 1 thì form 2 sẽ k bị tắt.

MediaFire

DemoCloseForm.rar

MediaFire is a simple to use free service that lets you put all your photos, documents, music, and video in a single place so you can access them anywhere and share them everywhere.

nhoxshockq8 viết 18:41 ngày 30/09/2018

Sao mà khi e nhấn Button xong rồi tắt Form 2 đi rồi lại nhấn Button thì nó hiện lỗi này vậy a Tuấn ?

Phạm Hoàng Tuấn viết 18:35 ngày 30/09/2018

E sửa lại file Form1.cs. Vì khi e đóng Form2, thì nó sẽ bị disposed (Giải phóng tài nguyên, tạm hiểu là khi e close form thì nó sẽ hủy form đó). Nên sau đó e gọi phương thức Show của form đó nó sẽ bị lỗi như trên.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();
        
        }

      
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();//Sẽ khai báo và tạo mới  form mỗi khi click
            frm.Show();
        }
    }
}

nhoxshockq8 viết 18:42 ngày 30/09/2018

Sao em mở Task Manager thì chương trình vẫn còn chạy dù đã tắt chương trình rồi vậy a Tuấn ?

Phạm Hoàng Tuấn viết 18:34 ngày 30/09/2018

E bắt sự kiện Form_Closed của form cuối cùng (khi tắt form này, tức là thoát ứng dụng) thì e thêm vào dòng code :

 Application.Exit();

Ví dụ :

     void Form2_FormClosed(object sender, FormClosedEventArgs e)
      {
           Application.Exit();
      }
Bài liên quan
0