Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 37 kết quả

Đề tài: click vào button trên form 1, form 2 xuất hiện và đồng thời form ẩn xuống...

  1. #1
    Ngày gia nhập
    01 2011
    Bài viết
    36

    Mặc định click vào button trên form 1, form 2 xuất hiện và đồng thời form ẩn xuống...

    Deal all! Em có 1 bài tập nhở thế này ạ ! Em thử làm rồi nhưng ko biết đúng không ?
    Mô tả:
    + Em có 2 form form1 và form2.
    + khi click 1 button trên form 1 thì mở form 2, đồng thời form1 ẩn.
    + trên form2 có nút back về form1 với yêu cầu tuơng tự .
    Code:
    Form1:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9.  
    10. namespace WindowsFormsApplication1
    11. {
    12.     public partial class Form1 : Form
    13.     {
    14.         public Form1()
    15.         {
    16.             InitializeComponent();
    17.         }
    18.  
    19.         private void Form1_Load(object sender, EventArgs e)
    20.         {
    21.             Application.Run();
    22.         }
    23.  
    24.         private void btClick_Click(object sender, EventArgs e)
    25.         {
    26.             Form frm = new Form2();
    27.             frm.Show();
    28.             this.Hide();
    29.         }
    30.  
    31.         private void btexit_Click(object sender, EventArgs e)
    32.         {
    33.             DialogResult ok = MessageBox.Show("Bạn muốn thoát ?","",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
    34.             if (ok == DialogResult.Yes)
    35.             {
    36.                 Application.Exit();
    37.             }
    38.         }
    39.     }
    40. }

    Form2:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9.  
    10. namespace WindowsFormsApplication1
    11. {
    12.     public partial class Form2 : Form
    13.     {
    14.         public Form2()
    15.         {
    16.             InitializeComponent();
    17.         }
    18.  
    19.         private void btBack_Click(object sender, EventArgs e)
    20.         {
    21.             Form frm = new Form1();
    22.             frm.Show();
    23.             this.Hide();
    24.         }
    25.     }
    26. }


    em làm như vậy cũng đã chạy được, em muốn hỏi thêm là các a chị làm như thế nào ạ ? và cho em xin hướng dẫn ạ ,em cảm ơn !

  2. #2
    Ngày gia nhập
    10 2012
    Bài viết
    204

    khi bạn hide form1 đi tức là form đó vẫn chạy nhưng mà đang ẩn thôi, nếu bạn muốn khi ấn nút back để trở lại form1 và form2 đóng thì bạn ko nên new Form1() nữa vì như thế sẽ có tới 2 form1 chạy. Đây là 1 bài tập nhỏ thôi, nếu như là 1 đồ án thật và xử lý nhiều thứ trên Form1 sẽ tốn tài nguyên lắm.

  3. #3
    Ngày gia nhập
    05 2008
    Bài viết
    78

    Thật sự thì Form1 hiện lên lại nhưng nó không còn là nó nữa. Và để show lại Form1 nguyên hiện trạng cũ cũng là cả một vấn đề . Không chơi kiểu Show Form2 bằng kiểu Showdialog(), đóng Form2 thì Form1 hiện lên lại thì quá dễ rồi

  4. #4
    Ngày gia nhập
    10 2012
    Bài viết
    204

    sao lại ko đc, khi bạn gọi form2 bên form1, bạn truyền tham số thí vào trong new Form2();
    bên form2 bạn nhận lại và xử lý .Show(), form1 sẽ luôn như vậy. Phải ko?

  5. #5
    Ngày gia nhập
    05 2008
    Bài viết
    78

    Trích dẫn Nguyên bản được gửi bởi AnyLastWord Xem bài viết
    sao lại ko đc, khi bạn gọi form2 bên form1, bạn truyền tham số thí vào trong new Form2();
    bên form2 bạn nhận lại và xử lý .Show(), form1 sẽ luôn như vậy. Phải ko?
    Ví dụ đoạn code đi bạn, mình không hiểu lắm

  6. #6
    Ngày gia nhập
    10 2012
    Bài viết
    204

    Mặc định click vào button trên form 1, form 2 xuất hiện và đồng thời form ẩn xuống...

    đây nhé, bên Form1, Form2 f2=new Form2(this);
    qua bên Form2,
    bạn nhận biến this trong public Form2(Form1 _f1)
    bạn tạo 1 biến Form1 f1 toàn cục. rồi dưới InitializeComponent() của Form2 bạn gán f1=_f1;
    thì lúc này, f1 đã đc giá trị của Form1 lúc hide() thì bạn muốn show lại thì f1.Show() thôi là ok rồi.

  7. #7
    Ngày gia nhập
    01 2009
    Bài viết
    177

    Đây là cách làm của mình ở bài của bạn.
    Để hiểu thêm bạn nên đọc về Design Pattern.

    Program:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Windows.Forms;
    5.  
    6. namespace Form1AndForm2
    7. {
    8.     static class Program
    9.     {
    10.         /// <summary>
    11.         /// The main entry point for the application.
    12.         /// </summary>
    13.         [STAThread]
    14.         static void Main()
    15.         {
    16.             Application.EnableVisualStyles();
    17.             Application.SetCompatibleTextRenderingDefault(false);
    18.             Application.Run( Form1.Instance() );
    19.         }
    20.     }
    21. }
    Form1:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9.  
    10. namespace Form1AndForm2
    11. {
    12.     public partial class Form1 : Form
    13.     {
    14.         private static Form1 _instance;
    15.  
    16.         private  Form1()
    17.         {
    18.             InitializeComponent();
    19.         }
    20.  
    21.         public static Form1 Instance()
    22.         {
    23.             if (_instance == null)
    24.                 _instance = new Form1();
    25.             return _instance;
    26.         }
    27.  
    28.         private void button1_Click(object sender, EventArgs e)
    29.         {
    30.             Form2 frm2 = Form2.Instance();
    31.             frm2.Show();
    32.             this.Hide();
    33.         }
    34.     }
    35. }
    Form2:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9.  
    10. namespace Form1AndForm2
    11. {
    12.     public partial class Form2 : Form
    13.     {
    14.         private static Form2 _instance;
    15.  
    16.         private  Form2()
    17.         {
    18.             InitializeComponent();
    19.         }
    20.  
    21.         public static Form2 Instance()
    22.         {
    23.             if (_instance == null)
    24.             {
    25.                 _instance = new Form2();
    26.             }
    27.             return _instance;
    28.         }
    29.  
    30.         private void button1_Click(object sender, EventArgs e)
    31.         {
    32.             Form1 frm1 =  Form1.Instance();
    33.             frm1.Show();
    34.             this.Hide();
    35.         }
    36.        
    37.         // Khi đóng Form2 thì dừng luôn chương trình!
    38.         // Nếu không có hàm này thì khi đóng Form2, Form1 vẫn đang chạy ẩn.
    39.         private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    40.         {
    41.             Form1 frm1 = Form1.Instance();
    42.             frm1.Dispose();
    43.         }
    44.     }
    45. }

  8. #8
    Ngày gia nhập
    08 2010
    Bài viết
    46

    Code của bạn family2806, mình thấy không được hay lắm. Theo cách của bạn AnyLastWord, đơn giản và theo hướng đối tượng hơn.

  9. #9
    Ngày gia nhập
    10 2012
    Bài viết
    204

    đây là cách của mình
    Khi chạy chương trình thì Form1 chạy đầu tiên
    Form 1:
    Visual C# Code:
    1.     public partial class Form1 : Form {
    2.         public Form1() {
    3.             InitializeComponent();
    4.         }
    5.  
    6.         private void btnToForm2_Click(object sender, EventArgs e) {
    7.             Form2 f2 = new Form2(this);
    8.             f2.Show();
    9.             this.Hide();
    10.         }
    11.     }

    Form 2:
    Visual C# Code:
    1.     public partial class Form2 : Form {
    2.         private Form1 _f1;
    3.         public Form2(Form1 f1) {
    4.             InitializeComponent();
    5.             _f1 = f1;
    6.         }
    7.  
    8.         private void btnBackToForm1_Click(object sender, EventArgs e) {
    9.             this.Dispose();
    10.             _f1.Show();
    11.         }
    12.  
    13.         private void Form2_FormClosing(object sender, FormClosingEventArgs e) {
    14.             Application.Exit();
    15.         }
    16.     }

  10. #10
    Ngày gia nhập
    01 2009
    Bài viết
    177

    Trích dẫn Nguyên bản được gửi bởi AnyLastWord Xem bài viết
    đây là cách của mình
    Khi chạy chương trình thì Form1 chạy đầu tiên
    Form 1:
    Visual C# Code:
    1.     public partial class Form1 : Form {
    2.         public Form1() {
    3.             InitializeComponent();
    4.         }
    5.  
    6.         private void btnToForm2_Click(object sender, EventArgs e) {
    7.             Form2 f2 = new Form2(this);
    8.             f2.Show();
    9.             this.Hide();
    10.         }
    11.     }

    Form 2:
    Visual C# Code:
    1.     public partial class Form2 : Form {
    2.         private Form1 _f1;
    3.         public Form2(Form1 f1) {
    4.             InitializeComponent();
    5.             _f1 = f1;
    6.         }
    7.  
    8.         private void btnBackToForm1_Click(object sender, EventArgs e) {
    9.             this.Dispose();
    10.             _f1.Show();
    11.         }
    12.  
    13.         private void Form2_FormClosing(object sender, FormClosingEventArgs e) {
    14.             Application.Exit();
    15.         }
    16.     }
    Thế tớ hỏi thêm 1 câu.
    Với code này của bạn, nếu bài toán mở rộng ra Form 2 phải tương tác với Form 3, Form 4 thì thế nào?
    Chả lẽ nó phải tương tác với bao nhiêu Form thì mình phải tạo chừng đó contructor?
    Bạn không thấy như thế quá dài dòng sao?
    Ngoài ra code của bạn còn bị 1 vấn đề.
    Nếu lần thứ nhất ở Form1 ấn hiện Form2. OK không vấn đề gì.
    Nhưng lần thứ 2, Form1 hiện giờ không còn tương tác với Form2 đã đóng trước đó. Bạn hiểu ý mình chứ?
    Nếu như Form1 và Form2 phải trao đổi dữ liệu cho nhau thì sao? Cách làm này hoàn toàn không thể áp dụng được.
    Đã được chỉnh sửa lần cuối bởi family2806 : 20-10-2012 lúc 09:38 PM.

Các đề tài tương tự

  1. Mở Form mới bằng cách click vào button ở Form cũ
    Gửi bởi vansang1706 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 25-10-2013, 01:10 AM
  2. vấn đề click button hiện form và close form
    Gửi bởi ngai_chau trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 14
    Bài viết cuối: 18-09-2013, 01:19 AM
  3. Làm thế nào để click vào nút minimum trong form thì form ẩn đi không xuất hiện ở taskbar?
    Gửi bởi thanhhungph127 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 16-07-2013, 09:45 PM
  4. Click Button load form phụ từ form chính và đóng form 9
    Gửi bởi cktn5590 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 29-02-2012, 10:30 PM
  5. Làm sao click được button trên web form bằng ứng dụng c#?
    Gửi bởi dlover trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 03-02-2012, 10:49 AM

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn