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 xin chân thành cảm ơn cả nhà

Delegate hoặc Event.

1 Like

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

// 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ế.

2 Likes
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è";
    
}

1 Like

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

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?