【问题标题】:Using delegate event handler to get data from UserControl to Form使用委托事件处理程序从 UserControl 获取数据到 Form
【发布时间】:2022-11-16 09:12:36
【问题描述】:

我有一个 WinForm,并添加了一个带有 DataGridView 的 UserControl。 现在我想双击 DataGridView 并将对象数据添加到我的表单中。

在我的用户控件中:

 public event DataGridViewCellEventHandler dg_CellDoubleClickEvent;

private void dg_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                try
                {
                    Cursor.Current = Cursors.WaitCursor;
                     Address a = dg.Rows[e.RowIndex].DataBoundItem as Address;
                    if (a != null)
                    {
                       // how can I pass my Address object??
                        dgAngebote_CellDoubleClickEvent?.Invoke(this.dgAngebote, e);
                        
                    }
                    
                }
                finally { Cursor.Current = Cursors.Default; }
            }
        }

在我的表格中:

 private void FormAddress_Load(object sender, EventArgs e)
        {
            uc.dg_CellDoubleClickEvent += new DataGridViewCellEventHandler(myEvent);
        }
        private void myEvent(object sender, DataGridViewCellEventArgs e)
        {
            MessageBox.Show("test");
        }

显示我的消息框。没关系,但我想显示我的地址。 这是这样做的正确方法吗?如何?

亲切的问候。

【问题讨论】:

    标签: c# event-handling delegates user-controls


    【解决方案1】:

    您可以将委托更改为您定义的委托或使用 System.Action 的通用形式。还可以选择使用 EventHandler 并定义您自己的事件参数类,您可以向该类添加属性和逻辑。

    下面是一个使用 Action 委托的示例,其中 T 是您的地址类型。

    public event Action<Address> OnAddressSelected;
    
    ...
    
    Address address = dg.Rows[e.RowIndex].DataBoundItem as Address;
    
    if (address != null)
    {
        OnAddressSelected?.Invoke(address);
    }
    

    并在表格中

    private void FormAddress_Load(object sender, EventArgs e)
    {
        uc.OnAddressSelected += OnAddressSelected;
    }
    private void OnAddressSelected(Address address)
    {
        MessageBox.Show($"Address: {address}");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多