第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何創(chuàng)建一個(gè)靜態(tài)全局事件,以便一個(gè)表單可以監(jiān)聽(tīng)另一個(gè)不是父表單的表單事件?

如何創(chuàng)建一個(gè)靜態(tài)全局事件,以便一個(gè)表單可以監(jiān)聽(tīng)另一個(gè)不是父表單的表單事件?

C#
holdtom 2022-11-21 22:03:02
我正在使用 WinForms,我有 3 種形式。FormA、FormB 和 FormC。FormA 創(chuàng)建 FormB,F(xiàn)ormB 創(chuàng)建 FormC。我需要 FormA 知道 FormC 何時(shí)關(guān)閉。FormB 沒(méi)有參與。我還有一個(gè)每個(gè)表單都可以訪問(wèn)的全局靜態(tài)類(lèi)。我已經(jīng)查看了如何使用另一種形式正確地偵聽(tīng)表單事件和在 C# 中將事件從一種形式傳播到另一種形式,但它們僅適用于 FormB 偵聽(tīng) FormC。如何在全局靜態(tài)類(lèi)中創(chuàng)建一個(gè)事件,以便 FormA 可以監(jiān)聽(tīng) FormC?謝謝
查看完整描述

3 回答

?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

static避免類(lèi)和全局引用幾乎總是 100% 更好。


最好傳遞一個(gè)Action<FormC>允許您通知FormC即將關(guān)閉的消息。


嘗試這個(gè):


FormA

public partial class FormA : Form

{

    public FormA()

    {

        InitializeComponent();

    }


    private void Button1_Click(object sender, EventArgs e)

    {

        var formB = new FormB(this.ClosingC);

        formB.Show();

    }


    private void ClosingC(FormC formC)

    {

        MessageBox.Show("Closing C");

    }

}

FormB

public partial class FormB : Form

{

    public FormB()

    {

        InitializeComponent();

    }


    private Action<FormC> _closingFormC = null;


    public FormB(Action<FormC> closingFormC)

        : this()

    {

        _closingFormC = closingFormC;

    }


    private void Button1_Click(object sender, EventArgs e)

    {

        var formC = new FormC(_closingFormC);

        formC.Show();

    }

}

FormC

public partial class FormC : Form

{

    public FormC()

    {

        InitializeComponent();

    }


    private Action<FormC> _closingFormC = null;


    public FormC(Action<FormC> closingFormC)

        : this()

    {

        _closingFormC = closingFormC;

    }


    private void FormC_FormClosing(object sender, FormClosingEventArgs e)

    {

        _closingFormC?.Invoke(this);

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-11-21
?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

我會(huì)使用事件聚合。這是一個(gè)小的Install-Package Caliburn.Micro.EventAggregator


曾經(jīng)像


public class MyForm : Form, IHandle<MyEvent>

{

   public MyForm() 

   {

      SomeStaticPlace.EventAggregator.Subscribe(this); //Can be replaced with DI

   }


   public void Handle(MyEvent message) 

   {

      //Act on event

   }

}

并發(fā)布SomeStaticPlace.EventAggregator.Publish(new MyEvent(...));


查看完整回答
反對(duì) 回復(fù) 2022-11-21
?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

這是帶有靜態(tài)事件的全局靜態(tài)類(lèi)FormClosed:


public static class GlobalStaticClass

{

    public static event FormClosedEventHandler FormClosed;

    public static void OnFormClosed(object sender, FormClosedEventArgs e)

    {

        FormClosed?.Invoke(sender, e);

    }

}

這是FormC。引發(fā)FormClosed事件:


public partial class FormC : Form

{

    public FormC()

    {

        InitializeComponent();

        this.FormClosed += (sender, e) =>

        {

            GlobalStaticClass.OnFormClosed(sender, e);

        };

    }

}

這是FormA聽(tīng)這個(gè)事件的:


public partial class FormA : Form

{

    public FormA()

    {

        InitializeComponent();

        GlobalStaticClass.FormClosed += (sender, e) =>

        {

            //if (sender is FormC)

            MessageBox.Show(((Form)sender).Name + " Closed, reason: " + e.CloseReason);

        };

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-11-21
  • 3 回答
  • 0 關(guān)注
  • 147 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)