[英]VB to C# - auto naming of event handlers vs explicit wiring
很抱歉,如果这是重复的; 我已经广泛搜索了基本解释。
TL; DR-我已经知道如何连接事件,我的问题与支持信息和事件处理程序命名约定有关 ,我找不到答案。 我已经在这里 , 这里 , 这里 , 这里和这里阅读了 ,我认为信息过载使我感到困惑,或者我忽略了显而易见的信息。
我有一个庞大的Web窗体(VB)解决方案,需要从某些Web Forms Server Control项目开始转换为C#。 在每个内部,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
。 因此,我的问题是:
AutoEventWireUp="False"
,我是否必须手动连接每个事件(我希望如此,这是一件好事[我认为...])? 当AutoEventWireUp
为true时,将寻找以下方法:
- 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,则必须手动添加任何此类事件的处理程序。
您可以在这里查看更多信息。
不能完全确定这是否是正确的答案,但您应该将其视为从需要的时候开始关联事件。 如果这是从创建类开始的,则可以在构造函数中或在asp.net中的Page_Load委托中添加钩子。
像这样
void Page_Load(object sender, EventArgs e)
{
PreRender += AccordionPanelHolder_PreRender;
Load += AccordionPanelHolder_Load;
Init += Accordion_Init;
}
但是很久以前,我正在使用Web Forms,所以也许有些事情我忘记了,但这与我在常规C#应用程序中的处理方式类似。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.