VB 到 C# - 事件处理程序的自动命名与显式连接
VB to C# - auto naming of event handlers vs explicit wiring
抱歉,如果这是重复的;我广泛搜索了基本解释。
TL;DR - 我已经知道如何连接事件,我的问题与支持信息和事件处理程序命名约定有关,我找不到答案.已经阅读 here, here, here, here, and here 我认为信息过多让我感到困惑,或者我忽略了显而易见的事情。
我有一个庞大的 Web 表单 (VB) 解决方案需要转换为 C#,从一些 Web 表单服务器控件项目开始。在每个中,VB 使用 Handles
字来连接事件处理程序:
Public Class Accordion
Inherits CompositeControl
Private Sub Accordion_Init(sender As Object, e As System.EventArgs) Handles Me.Init
End Sub
Private Sub AccordionPanelHolder_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Private Sub AccordionPanelHolder_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
End Sub
End Class
当使用任何类型的代码转换器时,根据我的研究,C# 方法意味着手动连接事件处理程序(为简洁起见缩短了代码):
public Accordion()
{
PreRender += AccordionPanelHolder_PreRender;
Load += AccordionPanelHolder_Load;
Init += Accordion_Init;
}
private void AccordionPanelHolder_PreRender(object sender, System.EventArgs e)
{
// ...
}
我对上面的内容很满意,但是,如果我在 VS 中创建一个新的 Web 表单,那么默认代码就是这样:
public partial class TestPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// to do
}
}
页面中没有事件逻辑处理程序逻辑。我看到 AutoEventWireUp="True"
,而通常我会将其设为 False
。因此我的问题是:
- What/Where 是按照上一个示例定义的 C# 用于自动连接事件处理程序的命名约定吗?我很紧张方法可以 运行 两次。我看到 VS 没有 C# 的下拉功能来创建空的事件处理程序。
- 如果
AutoEventWireUp="False"
,我是否必须手动连接每个事件(我希望如此,这是一件好事 [我认为...])?
当AutoEventWireUp
为真时,将查找以下方法:
- Page_PreInit
- Page_Init
- Page_InitComplete
- Page_PreLoad
- Page_Load
- Page_LoadComplete
- Page_DataBind
- Page_SaveStateComplete
- Page_PreRender
- Page_PreRenderComplete
- Page_Unload
- Page_Error
- Page_AbortTransaction
- Page_CommitTransaction
因此,方法必须使用这个确切的名称。
如果您将 AutoEventWireUp
设置为 false,您将必须手动添加任何此类事件的处理程序。
您可以查看here了解更多信息。
不完全确定这是否是正确答案,但您应该将其视为在需要时连接事件。
如果这是从您的 class 创建而来,您可以在构造函数中添加挂钩,或者像 asp.net 中那样 Page_Load 委托。
类似这样
void Page_Load(object sender, EventArgs e)
{
PreRender += AccordionPanelHolder_PreRender;
Load += AccordionPanelHolder_Load;
Init += Accordion_Init;
}
但很久以前我就在使用 Web 窗体,所以也许我忘记了一些东西,但这与我在常规 C# 应用程序中的做法类似。
抱歉,如果这是重复的;我广泛搜索了基本解释。
TL;DR - 我已经知道如何连接事件,我的问题与支持信息和事件处理程序命名约定有关,我找不到答案.已经阅读 here, here, here, here, and here 我认为信息过多让我感到困惑,或者我忽略了显而易见的事情。
我有一个庞大的 Web 表单 (VB) 解决方案需要转换为 C#,从一些 Web 表单服务器控件项目开始。在每个中,VB 使用 Handles
字来连接事件处理程序:
Public Class Accordion
Inherits CompositeControl
Private Sub Accordion_Init(sender As Object, e As System.EventArgs) Handles Me.Init
End Sub
Private Sub AccordionPanelHolder_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Private Sub AccordionPanelHolder_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
End Sub
End Class
当使用任何类型的代码转换器时,根据我的研究,C# 方法意味着手动连接事件处理程序(为简洁起见缩短了代码):
public Accordion()
{
PreRender += AccordionPanelHolder_PreRender;
Load += AccordionPanelHolder_Load;
Init += Accordion_Init;
}
private void AccordionPanelHolder_PreRender(object sender, System.EventArgs e)
{
// ...
}
我对上面的内容很满意,但是,如果我在 VS 中创建一个新的 Web 表单,那么默认代码就是这样:
public partial class TestPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// to do
}
}
页面中没有事件逻辑处理程序逻辑。我看到 AutoEventWireUp="True"
,而通常我会将其设为 False
。因此我的问题是:
- What/Where 是按照上一个示例定义的 C# 用于自动连接事件处理程序的命名约定吗?我很紧张方法可以 运行 两次。我看到 VS 没有 C# 的下拉功能来创建空的事件处理程序。
- 如果
AutoEventWireUp="False"
,我是否必须手动连接每个事件(我希望如此,这是一件好事 [我认为...])?
当AutoEventWireUp
为真时,将查找以下方法:
- Page_PreInit
- Page_Init
- Page_InitComplete
- Page_PreLoad
- Page_Load
- Page_LoadComplete
- Page_DataBind
- Page_SaveStateComplete
- Page_PreRender
- Page_PreRenderComplete
- Page_Unload
- Page_Error
- Page_AbortTransaction
- Page_CommitTransaction
因此,方法必须使用这个确切的名称。
如果您将 AutoEventWireUp
设置为 false,您将必须手动添加任何此类事件的处理程序。
您可以查看here了解更多信息。
不完全确定这是否是正确答案,但您应该将其视为在需要时连接事件。 如果这是从您的 class 创建而来,您可以在构造函数中添加挂钩,或者像 asp.net 中那样 Page_Load 委托。
类似这样
void Page_Load(object sender, EventArgs e)
{
PreRender += AccordionPanelHolder_PreRender;
Load += AccordionPanelHolder_Load;
Init += Accordion_Init;
}
但很久以前我就在使用 Web 窗体,所以也许我忘记了一些东西,但这与我在常规 C# 应用程序中的做法类似。