动态创建一个按钮并添加EventHandler()

时间:2017-11-24 18:55:03

标签: vb.net dynamic eventhandler c#-to-vb.net

我正在将C#WinForm应用程序迁移到VB.Net。

在部分代码中定义一个Button并将一个EventHandler添加到Method。

 ToolStripButton newExportButton = new ToolStripButton();
  newExportButton = new ToolStripButton("", null, new EventHandler(ExportReport));

  private void ExportReport(Object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.DefaultExt = "pdf";
            saveFileDialog.Filter = Visor.ObtenerFiltroDeExtensiones();

            if (saveFileDialog.ShowDialog() == DialogResult.OK && Path.HasExtension(saveFileDialog.FileName))
            {
                ReportDocument reportDocument = this.VisorReporte.ReportSource as ReportDocument;               
                reportDocument.ExportToDisk(dicExtensiones[Path.GetExtension(saveFileDialog.FileName)], saveFileDialog.FileName);
            }
        }

当我尝试迁移到Vb.Net时,我遇到了迁移EventHandler的问题。

我已阅读open issue但它不符合我的需要。我没有定义任何指定的事件,如(点击)

我已将该行更改为此行

  newExportButton = New ToolStripButton("", Nothing, New EventHandler(ExportarReporte))

我错误地说AddressOf缺失。

如何将事件处理程序附加到该按钮以调用特定方法?

由于

1 个答案:

答案 0 :(得分:3)

在VB.NET中,直接引用方法时必须使用AddressOf operator。它用于创建相关方法的委托。

New EventHandler(...)不是必需的,因为如果委托的签名正确,则委托被隐式地转换为事件处理程序。

这应该有效:

newExportButton = New ToolStripButton("", Nothing, AddressOf ExportarReporte)