【问题标题】:Event not being fired in C# code在 C# 代码中未触发事件
【发布时间】:2016-08-16 12:31:45
【问题描述】:

我的 VB 项目中有一个带有按钮的表单。按钮,点击后执行如下功能

Private Sub FrmAddMaterial_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Enter
        If LstMaterials.SelectedIndex > -1 Then
            UpdateMaterialScreen(Me, LstMaterials.SelectedIndex, ErrorFlag)
        Else
            UpdateMaterialScreen(Me, 0, ErrorFlag)
        End If
    End Sub

我将整个代码转换为 C#,将按钮绑定到相同的事件,如下所示。

 Private Sub ButNewEditSoftMaterials_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButNewEditSoftMaterials.Click
        MaterialFrm = New FrmAddMaterial
        MaterialFrm.Show()
    End Sub

FrmAddMaterial 是一个正在加载的表单,它有一个如下所示的事件。

 private void FrmAddMaterial_Enter(object sender, System.EventArgs e)
        {
            if (LstMaterials.SelectedIndex > -1) {
                ModSoftOutput.UpdateMaterialScreen(this, LstMaterials.SelectedIndex,ref ErrorFlag);
            } else {
                ModSoftOutput.UpdateMaterialScreen(this, 0,ref ErrorFlag);
            }
        }

代码FrmAddMaterial_Enter 没有在C# 中触发,但它在VB 中触发。我检查了FrmAddMaterial 属性,可以看到Enter 绑定事件。 什么问题不能让我的FrmAddMaterial_Enter 在 C# 中触发?

【问题讨论】:

  • 我认为您需要将侦听器附加到 Click 事件而不是 Enter 事件。 Enter 事件是在控件进入未点击时触发的。
  • 这两段代码是相同的,所以问题必须与附加处理程序有关。你能发布那个代码。您还可以澄清一下您在输入表单与单击按钮方面的期望行为是什么
  • 你应该使用 Click 事件。输入控件时触发 Enter 事件。阅读以下文档以了解 Enter 事件 msdn.microsoft.com/en-us/library/…
  • 当单击按钮时,该代码也不会在 VB.NET 中触发。此外,单击按钮时甚至不会触发 FrmAddMaterial_Enter。您使用了错误的事件。

标签: c# vb.net winforms


【解决方案1】:

在 C# 中,触发 Click 的是 Click Event,因此您必须将您的方法/侦听器绑定到该事件。

MSDN 状态:单击按钮时发生:https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.click(v=vs.110).aspx

Enter Event 出现在输入控件时,例如当您使用 Tab 切换时

MSDN 参考:https://msdn.microsoft.com/en-us/library/system.windows.forms.control.enter(v=vs.110).aspx

尝试将您的侦听器重新分配给Click Event,它应该可以工作,或者至少在您单击按钮时被触发。

【讨论】:

    【解决方案2】:

    来自enter Event的MSDN文档:

    Enter 和 Leave 事件被 Form 类抑制。 Form 类中的等效事件是 Activated 和 Deactivate 事件。

    https://msdn.microsoft.com/de-de/library/system.windows.forms.control.enter(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

    因此它们不能与表单一起使用,而只能与控件一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 2021-01-18
      • 2019-10-19
      相关资源
      最近更新 更多