簡體   English   中英

C# 如何讓表單訂閱在 floy 布局面板內的用戶控件內的事件?

[英]C# How to have a form subscribe to an event which is within a user control within a floy layour panel?

所以我在 WinForms 應用程序上有一個表單。 在那個表單上是一個 FlowLayoutPanel。 FlowLayout 面板上有一堆用戶控件,每個控件代表數據庫中表中的行。 每個控件上都有一個按鈕。

如何讓表單訂閱按鈕單擊傳遞回該行數據庫信息的控件之一?

這是控制代碼:

public partial class ctrlLeague : UserControl
{
    public League activeLeague = new League();
    public event EventHandler<MyEventArgs> ViewLeagueClicked;
    public ctrlLeague(League lg)
    {
        InitializeComponent();
        lblLeagueName.Text = lg.leagueName;
        activeLeague = lg;
    }

    private void btnViewLeague_Click(object sender, EventArgs e)
    {
        ViewLeagueClicked(this, new MyEventArgs(activeLeague));
    }

    public class MyEventArgs : EventArgs
    {
        public MyEventArgs(League activeLeague)
        {
            ActiveLeague = activeLeague;
        }
        public League ActiveLeague { get; }
    }
}

如果我將以下內容放入表單構造函數中,它會告訴我“

您可以使用委托定義您喜歡的事件並在任何您想要的地方調用它,這里它在 btnView_Click 內部調用。

這意味着每當調用 btnView_Click 時,實際上都會調用您的事件。

public partial class ctrlLeague : UserControl
{
    public League activeLeague = new League();
    public event EventViewLeagueClicked ViewLeagueClicked;
    public delegate void EventViewLeagueClicked(object Sender);


    public ctrlLeague(League lg)
    {
       InitializeComponent();
       lblLeagueName.Text = lg.leagueName;
       activeLeague = lg;
    }

    private void btnViewLeague_Click(object sender, EventArgs e)
    {
       if (ViewLeagueClicked != null)
         ViewLeagueClicked(activeLeague);
    }
}

現在使用

public Form1()
{
    InitializeComponent();
    League league = new League();
    league.leagueName = "Seri A";
    
    
    //
    //These lines are best added in Form1.Designer.cs
    //
    ctrlLeague control = new ctrlLeague(league);
    control.Location = new System.Drawing.Point(350, 50);
    control.Name = "ctrlLeague";
    control.Size = new System.Drawing.Size(150, 100);
    control.ViewLeagueClicked += Control_ViewLeagueClicked;
    this.Controls.Add(control);
}
private void Control_ViewLeagueClicked(object Sender)
{
   League l = Sender as League;
   MessageBox.Show(l.leagueName);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM