在 C# 代码中订阅事件

本文关键字:事件 代码 | 更新日期: 2023-09-27 17:55:49

我将一段代码从VB转换为C#。VB中的UI有一个按钮ButNewOrder。单击按钮后,以下方法以VB代码执行

 Public Sub mnuFileNewJob_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles ButNewOrder.Click
        Dim ErrorFlag As ErrorFlagType = InitErrorFlag()
        Try
            System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
            StatusText = "Loading New Job."
            LoadNewSoftJob(Me)
            System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
        Catch ex As Exception
            ErrorFlag.NumErrors += 1
            ReDim Preserve ErrorFlag.ErrorDef(ErrorFlag.NumErrors - 1)
            With ErrorFlag.ErrorDef(ErrorFlag.NumErrors - 1)
                .Description = "Error Loading New Job: " + ex.Message
                .Number = ErrorFlag.NumErrors - 1
            End With
        End Try
        If ErrorFlag.NumErrors > 0 Then
            Dim ErrFrm As New FrmErrList
            ErrFrm.ErrorFlag = ErrorFlag
            ErrFrm.Show()
        End If
    End Sub

当我转换为C#时,上面的代码,我得到这个

public void mnuFileNewJob_Click(System.Object eventSender, System.EventArgs eventArgs)
        {
            Mold_Power_Suite.Model.FrontEndStructures.ErrorFlagType ErrorFlag = FrontEndStructures.InitErrorFlag();
            try
            {
                System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;
                ModSoftFrontEndGlobalVariables.StatusText = "Loading New Job.";
                frmMain main = new frmMain();
                MainMod.LoadNewSoftJob(this);// I think I need to replace this with the form name
                System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default;
            }
            catch (Exception ex)
            {
                ErrorFlag.NumErrors += 1;
                Array.Resize(ref ErrorFlag.ErrorDef, ErrorFlag.NumErrors);
                var _with1 = ErrorFlag.ErrorDef[ErrorFlag.NumErrors - 1];
                _with1.Description = "Error Loading New Job: " + ex.Message;
                _with1.Number =Convert.ToInt16( ErrorFlag.NumErrors - 1);
            }
            if (ErrorFlag.NumErrors > 0)
            {
                FrmErrList ErrFrm = new FrmErrList();
                ErrFrm.ErrorFlag = ErrorFlag;
                ErrFrm.Show();
            }
        }

单击 C# 应用程序中的按钮不会产生任何结果。双击按钮会生成以下存根,这意味着按钮的单击事件上没有任何连接。

private void ButNewOrder_Click(object sender, EventArgs e)
        {
        }

我想知道如何让我的按钮执行与 VB 代码相同的功能?

在 C# 代码中订阅事件

下面是 VB AddHandler语句的 C# 版本:

ButNewOrder.Click += new System.EventHandler(this.mnuFileNewJob_Click);

传统上,表单设计器将这行代码添加到您的InitializeComponent()方法中,但从技术上讲,您可以将其放在几乎任何位置。通过将其放在表单启动的位置附近,您可以获得最佳结果。

选择按钮后,可以导航到 Visual Studio 中的"属性->事件"(事件表示为 bolt),然后在"单击事件"下拉列表中选择方法。

或者在构造函数中添加以下内容:

ButNewOrder += mnuFileNewJob_Click

或者,您可以导航到窗口的设计器代码(进入 InitializeComponent() ),并将ButNewOrder += ButNewOrder_Click替换为ButNewOrder += mnuFileNewJob_Click