01/10/2018, 16:31

Hỏi cách gọi hàm trong 2 form khác nhau

Xin chào mọi người , vâng vẫn là em với câu hỏi ngu và cực ngu .

Em muốn hỏi em có 2 Form tạm gọi form chính và form phụ làm các công việc như thế này.
-Form chính mở form phụ lên với phương thức show ( không dùng showdialog vì có thể mở nhiều form) .
-Form phụ thực thi xong khi tắt bắt sự kiện closing --> thực thi hàm ở form chính để form chính chạy

Nôm na là giống kiểu khi bạn chọn một cái hình ( form chính ) , sửa nó với paint ( form phụ ) --> Sau khi sửa trong trong paint thì đóng paint lại ( đóng form phụ ) --> làm cách nào đó để cái hình nó update được ấy ạ

Ngôn ngữ : C# window form

Em trình bày hơi ngu mong các anh chị thông cảm

Văn Dương viết 18:47 ngày 01/10/2018

Delegate hoặc Event.

Nguyễn Văn Vương viết 18:44 ngày 01/10/2018

bác demo nhẹ em phát được k ạ

Văn Dương viết 18:33 ngày 01/10/2018
// cái này khai báo một kiểu delegate có thể truyền 2 tham số qua
public delegate void FormCloseCallBackEventHandler(object sender, object data);


// Trong form này sẽ chứ 1 delegate kiểu như trên, sẽ thông qua delegate này để gọi method ở nơi khác mà được liên kết với delegate.
public class ShowForm{
    public FormCloseCallBackEventHandler CloseCallBack;

    // override hàm OnClosing của Form để truyền dữ liệu qua delegate và gọi hàm thực thi
    protected override void OnClosing(CancelEventArgs e) {
            base.OnClosing(e);
            // kểm tra delegate được gán chưa cho chắc cú, không lại nullexception
            if(CloseCallBack!=null)CloseCallBack(this, ...); // truyền dữ liệu và gọi method thực thi từ thằng khác
    }
}


public class MainForm(){
    // cái hàm này sẽ dùng để thực thi khi cái form kia gọi delegate. Nó phải có tham số đầu vào giống kiểu của delegate.
    private void RunAfterCloseShowForm(object sender, object data){
        // viết cái gì thì viết
    }


    private void ShowForm(){
        ShowForm frm = new ShowForm();
        frm.CloseCallBack = RunAfterCloseShowForm; // gán cái delegate của thằng ShowForm là hàm RunAfterCloseShowForm. Để mỗi khi thằng ShowForm gọi delegate thì RunAfterCloseShowForm sẽ thực thi.
        frm.TopMost = true;
        frm.Show();
    }
}

Tạm thế.

Evil Artist viết 18:32 ngày 01/10/2018
void Form1_Loaded(sender, e)
{
    Form2 f2 = new Form2();
    f2.Closed += DoAnyThing;
}

void DoAnyThing(sender, e)
{
    string msg = (sender as Form2).TextBoxNaoDoCuaForm2.Text + " Nghĩ đơn giản - Bớt màu mè";
    
}

Nguyễn Văn Vương viết 18:36 ngày 01/10/2018

Em làm được rồi cảm ơn bác nhiều ạ

Nguyễn Văn Vương viết 18:38 ngày 01/10/2018

Em làm được rồi cảm ơn bác nhiều ạ.

Bài liên quan
0