簡體   English   中英

用C#代碼訂閱事件

[英]Subscribing Events in C# Code

我將一段代碼從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#應用程序中單擊“按鈕”不會產生任何結果。 雙擊按鈕會生成以下存根,這意味着按鈕的click事件沒有任何關聯。

private void ButNewOrder_Click(object sender, EventArgs e)
        {

        }

我想知道如何讓我的按鈕執行與VB代碼相同的功能?

這是VB的AddHandler語句的C#版本:

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

傳統上,這行代碼是由表單設計者添加到InitializeComponent()方法中的,但是從技術上講,您可以將其放置在任何地方。 將其放在表單開始的位置附近,將獲得最佳結果。

選擇按鈕后,可以在Visual Studio中導航至“屬性”->“事件”(事件以螺栓表示),然后在“單擊事件”下拉列表中選擇方法。

或在構造函數中添加此代碼:

ButNewOrder += mnuFileNewJob_Click

或者,你可以瀏覽到你的窗口(到的設計器代碼InitializeComponent()並更換ButNewOrder += ButNewOrder_ClickButNewOrder += mnuFileNewJob_Click

暫無
暫無

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

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