Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 9 của 9
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Tạo mối liên hệ giữa các Form trong project C#

    Trong một project có rất nhiều form thực hiện mỗi chức năng riêng biệt. Bạn muốn có sự liên hệ giữa chúng để tiện việc giao tiếp, sử dụng, tác động lẫn nhau (như việc tại form này bạn muốn sử dụng các biến của form kia)...

    Đây là một số cách mà qua thời gian lập trình mình đã tìm hiểu được.

    Có 2 form có tên Form1, Form2 và các biến ở các form tương ứng


    Mã:
    //Form1    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }                Public String strMessF1="";    } //Form2    public partial class Form2 : Form    {        public Form2()        {            InitializeComponent();        }                Public String strMessF2="";    }
    Tại Form1 bạn gọi Form2 hiển thị nhưng khi tạo một đối tượng form2 thì lại khởi tạo đối tượng mới. Vì vậy với biến đối tượng như vậy bạn không thể sử dụng strMess1 tại Form1 được.

    1. Tại Form2 bạn tạo một biến là frmForm1 kiểu là Form1 rồi trong lúc hiển thị Form2 bạn gán Form1 cho biến đó.

    Mã:
    //Form1    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }                Public String strMessF1="";         private void ShowForm2()        {               Form2 frmForm2= New Form2();               frmForm2.frmForm1 = this;               frmForm2.Show();        }    } //Form2    public partial class Form2 : Form    {        public Form2()        {            InitializeComponent();        }        public Form1 frmForm1;        Public String strMessF2="";         //Sử dụng strMess1 tại Form1        private void Mess()        {              MessageBox.Show(frmForm1.strMess1);        }    }
    2. Cách mà ngày xưa người ta thường dùng là tạo một class tĩnh (static) với các biến (static) muốn dùng chung giữa các form. Sự thay đổi, tạo mới các biến đều được gán vào các biến trong class static này. Tại form khác sử dụng chỉ cần đến class này để lấy ra và sử dụng.

    3. Dùng singleton (cách tớ thường hay sử dụng)[IMG]images/smilies/tongue.png[/IMG] : Tại Form1 tạo một singleton để tránh việc tạo mới đối tượng khi show form lần 2.

    Mã:
    //Form1    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();            strMess1 = "Sunflower";        }         public string strMess1;         #region Singleton        static Form1 me = null;        static public Form1 GetObj()        {            if (me == null)            {                me = new Form1();            }            return me;        }        #endregion         private void button1_Click(object sender, EventArgs e)        {            Form2 frmForm2 = new Form2();            frmForm2.ShowDialog();        }    } //Form2    public partial class Form2 : Form    {        public Form2()        {            InitializeComponent();        }         private void button1_Click(object sender, EventArgs e)        {            MessageBox.Show(Form1.GetObj().strMess1);        }    }
    Với singleton bạn có thể biến thể để có những cách sử dụng khác.

    4. Như cách khai báo thứ nhất rồi thông quan Contructor để truyền biến.

    5. Liên kết giữa MDIParent và ChildForm thì đơn giản hơn.
    tại ChildForm bạn muốn sử dụng biến ở MDIParent thì chỉ cần tạo đối tượng mới là MDIParent rồi xác định đối tượng này là MDIParent hiện tại.

    Mã:
    //MDIParet    public partial class frmMDIParent : Form    {        public frmMDIParent()        {            InitializeComponent();        }         public string strMDIMess = "Sunflower";         private void ShowChildForm()        {            frmChildForm frm = new frmChildForm();            frm.MdiParent = this;            frm.Show();        }    } //ChildForm    public partial class frmChildForm : Form    {        public frmChildForm()        {            InitializeComponent();        }         private void button1_Click(object sender, EventArgs e)        {            frmMDIParent frmMDI = new frmMDIParent();            frmMDI = (frmMDIParent)this.MdiParent;             MessageBox.Show(frmMDI.strMDIMess);        }    }

  2. #2
    hay quá em không ngờ ngôn ngữ C# lại có nhiều ứng dụng đến vậy. C# muôn năm. Em xin chân thành cảm ơn gã khổng lồ phần mềm Microsoft đã tạo ra một ngôn ngữ hay đến vậy

  3. #3
    Trích dẫn Gửi bởi thanhtung1990
    hay quá em không ngờ ngôn ngữ C# lại có nhiều ứng dụng đến vậy. C# muôn năm. Em xin chân thành cảm ơn gã khổng lồ phần mềm Microsoft đã tạo ra một ngôn ngữ hay đến vậy
    Oach.Gio moi biet ha??
    (Sao khong viet duoc dau nhi?)

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi thanhtung1990
    hay quá em không ngờ ngôn ngữ C# lại có nhiều ứng dụng đến vậy. C# muôn năm. Em xin chân thành cảm ơn gã khổng lồ phần mềm Microsoft đã tạo ra một ngôn ngữ hay đến vậy
    Những khái niệm này trong Java đã có rồi mà, có gì đâu mà khen ghê thế, C# còn nhiều cái khác đáng để nói đến hơn.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    THiếu cái delegate rùi

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Các bạn chỉ mình cách dùng biến static và lớp tĩnh (cách 2 với); mình không biết cách này.[IMG]images/smilies/Cry.gif[/IMG]

  7. #7
    biết về 4rum này lâu rùi, nhung chi mới reg -> thanks bài viết của bạn => rất hay. tiếc là 4rum này không có tính năng vote ^^

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi neo8x
    THiếu cái delegate rùi
    Cái này đã được zkday2686 trình bày rồi ( rất hay).
    Thanks cho bài viết ![IMG]images/smilies/clap_grin.gif[/IMG]

  9. #9
    Em xin hỏi các bác 1 vấn đề này ạ. Em có 2 Form f1 và f2. Trên mỗi form có 1 button btn1 và btn2. Khi chạy phần mềm cả 2 form cùng hiện lên và nếu em nhấn btn1 thì btn2 ẩn đi (.visible) thì làm sao ạ?

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •