AddHandler无法正常工作 [英] AddHandler not working

查看:77
本文介绍了AddHandler无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码部分动态创建了LinkBut​​tons,允许用户转到包含他们未回答的问题的页面。调用创建LinkBut​​ton的
代码,以及AddHandler行

(我运行了一个Debug,发现它执行了这段代码,链接是
)。但是,单击LinkBut​​ton时,不会将事件处理程序称为

。以下是动态生成LinkBut​​tons以及我想要调用的事件处理程序的代码:

''生成LinkBut​​tons的代码:

Private Sub btnSubmit_Click(ByVal sender As Object,ByVal e As

System.Web.UI.ImageClickEventArgs)处理btnSubmit.Click

Me.submitanswers()

如果Me.completetest()那么

''我用来更新我的数据库的代码,不涉及这个

问题,因为Me.completetest( )返回false

否则

Me.lblAnswered.Text = String.Format(75个问题中的{0}

已回答(未回答) :",CStr(Me.questionsanswered()))

Dim myconnection As New

SqlConnection(System.Configuration.ConfigurationMa nager.AppSettings(" connectionstring"))

Dim cmd As New SqlCommand("",myconnection)

Dim qnumreader As SqlDataReader

Dim insertafter As Integer =

Me.Fo rm.Controls.IndexOf(Me.lblAnswered)+ 1

For i As Integer = 1 to 75

cmd.CommandText = String.Format(" SELECT

questions.questionnumber FROM useranswers INNER JOIN问题ON

useranswers.questionid = questions.questionid WHERE

questions.questionnumber = {0} AND useranswers.testid = {1} AND

useranswers.userid = {2}",i,CStr(Session(" testid")),

CStr(会话(" userid) ;)))

myconnection.Open()

qnumreader = cmd.ExecuteReader()

如果不是qnumreader.Read()那么

Dim questionlink As New LinkBut​​ton()

questionlink.CausesValidation = False

questionlink.CommandArgument = i

questionlink.CssClass =" answerRED"

questionlink.EnableViewState = False

questionlink.Text = i& "& nbsp;"

AddHandler questionlink.Command,AddressOf

Me.QuestionLinkCommand

Me.Form.Controls.AddAt(insertafter ,questionlink)

insertafter + = 1

结束如果

myconnection.Close()

下一页

Me.lblCloseParen.Visible = True

结束如果

结束子


''我想要的事件处理程序使用:

Private Sub QuestionLinkCommand(ByVal sender As Object,ByVal e As

System.Web.UI.WebControls.CommandEventArgs)

Dim myconnection As New

SqlConnection(System.Configuration.ConfigurationMa nager.AppSettings(" connectionstring"))

Dim cmd As New SqlCommand(" SELECT subgroupid FROM questions WHERE

questionnumber ="& e.CommandArgument,myconnection)

myconnection.Open()

Session(" subgroupid")= CInt( cmd.ExecuteScalar())

myconnection.Close()

结束子

当我运行我的应用程序时,btnSubmit_Click中的代码按照我的预期工作(或者至少它看起来像是b
)但是当我点击动态创建的

LinkBut​​tons(变量名称questionlink),它们回发但不触发QuestionLinkCommand方法(QuestionLinkCommand永远不会被执行

当我进行调试会话时)。我无法弄清楚为什么他们没有触发这个事件处理程序,因为我在创建

LinkBut​​tons时使用了AddHandler语句,并且eventhandler具有正确的签名。有没有什么?b $ b我做错了什么?谢谢。

-

Nathan Sokalski
nj * *******@hotmail.com
http:// www.nathansokalski.com/

I have a section of my code that dynamically creates LinkButtons to allow
the user to go to the page containing a question they have not answered. The
code that creates the LinkButton is called, as well as the AddHandler line
(I ran a Debug and saw that it executes this code, and the links are
displayed on the page afterwards). However, the eventhandler is not called
when the LinkButton is clicked. Here is the code that dynamically generates
the LinkButtons as well as the eventhandler I want to be called:
''The code that generates the LinkButtons:
Private Sub btnSubmit_Click(ByVal sender As Object, ByVal e As
System.Web.UI.ImageClickEventArgs) Handles btnSubmit.Click
Me.submitanswers()
If Me.completetest() Then
''Code that I use to update my database, not involved in this
problem because Me.completetest() returns false
Else
Me.lblAnswered.Text = String.Format("{0} of 75 Questions
Answered (Not Answered: ", CStr(Me.questionsanswered()))
Dim myconnection As New
SqlConnection(System.Configuration.ConfigurationMa nager.AppSettings("connectionstring"))
Dim cmd As New SqlCommand("", myconnection)
Dim qnumreader As SqlDataReader
Dim insertafter As Integer =
Me.Form.Controls.IndexOf(Me.lblAnswered) + 1
For i As Integer = 1 To 75
cmd.CommandText = String.Format("SELECT
questions.questionnumber FROM useranswers INNER JOIN questions ON
useranswers.questionid=questions.questionid WHERE
questions.questionnumber={0} AND useranswers.testid={1} AND
useranswers.userid={2}", i, CStr(Session("testid")),
CStr(Session("userid")))
myconnection.Open()
qnumreader = cmd.ExecuteReader()
If Not qnumreader.Read() Then
Dim questionlink As New LinkButton()
questionlink.CausesValidation = False
questionlink.CommandArgument = i
questionlink.CssClass = "answerRED"
questionlink.EnableViewState = False
questionlink.Text = i & " "
AddHandler questionlink.Command, AddressOf
Me.QuestionLinkCommand
Me.Form.Controls.AddAt(insertafter, questionlink)
insertafter += 1
End If
myconnection.Close()
Next
Me.lblCloseParen.Visible = True
End If
End Sub

''The eventhandler I want to use:
Private Sub QuestionLinkCommand(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.CommandEventArgs)
Dim myconnection As New
SqlConnection(System.Configuration.ConfigurationMa nager.AppSettings("connectionstring"))
Dim cmd As New SqlCommand("SELECT subgroupid FROM questions WHERE
questionnumber=" & e.CommandArgument, myconnection)
myconnection.Open()
Session("subgroupid") = CInt(cmd.ExecuteScalar())
myconnection.Close()
End Sub
When I run my Application, the code in btnSubmit_Click works as I expect (or
at least it looks like it did), but when I click the dynamically created
LinkButtons (variable name questionlink), they postback but do not trigger
the QuestionLinkCommand method (the QuestionLinkCommand never gets executed
when I do a debug session). I cannot figure out why they are not triggering
this eventhandler, because I use AddHandler statements when creating the
LinkButtons, and the eventhandler has the correct signature. Is there
something I am doing wrong? Thanks.
--
Nathan Sokalski
nj********@hotmail.com
http://www.nathansokalski.com/

推荐答案

尝试更换行


Dim questionlink As新的LinkBut​​ton()


to


Dim WithEvents questionlink As New LinkBut​​ton()


那工作?

" Nathan Sokalski"写道:
Try changing the line

Dim questionlink As New LinkButton()

to

Dim WithEvents questionlink As New LinkButton()

Does that work?
"Nathan Sokalski" wrote:

我有一段我的代码动态创建LinkBut​​tons以允许用户转到包含问题的页面的
没有回答。调用创建LinkBut​​ton的
代码,以及AddHandler行

(我运行了一个Debug,发现它执行了这段代码,链接是
)。但是,单击LinkBut​​ton时,不会将事件处理程序称为

。下面是动态生成LinkBut​​tons以及我想要调用的事件处理程序的代码:


''生成LinkBut​​tons的代码:

Private Sub btnSubmit_Click(ByVal sender As Object,ByVal e As

System.Web.UI.ImageClickEventArgs)处理btnSubmit.Click

Me.submitanswers ()

如果Me.completetest()那么

''我用来更新我的数据库的代码,不涉及这个

问题,因为Me.completetest()返回false

Else

Me.lblAnswered.Text = String.Format(75个问题中的{0}个

回答(未回答:",CStr(Me.questionsanswered()))

Dim myconnection As New

SqlConnection(System.Configuration.ConfigurationMa nager.AppSettings(" connectionstring"))

Dim cmd As New SqlCommand("",myconnection)

Dim qnumreader As SqlDataReader

Dim insertafter As Integer =

Me.Form.Controls.IndexOf(Me.lblAnswered)+ 1

for i As整数= 1到75

questions.questionnumber FROM useranswers INNER JOIN问题ON

useranswers .questionid = questions.questionid WHERE

questions.questionnumber = {0} AND useranswers.testid = {1} AND

useranswers.userid = {2}",i ,CStr(会话(testid)),

CStr(会话(userid)))

myconnection.Open()

qnumreader = cmd.ExecuteReader()

如果不是qnumreader.Read()那么

Dim questionlink As New LinkBut​​ton()

questionlink。 CausesValidation = False

questionlink.CommandArgument = i

quest ionlink.CssClass =" answerRED"

questionlink.EnableViewState = False

questionlink.Text = i& "

AddHandler questionlink.Command,AddressOf

Me.QuestionLinkCommand

Me.Form.Controls.AddAt(insertafter,questionlink)

insertafter + = 1

结束如果

myconnection.Close()

下一页

我.lblCloseParen.Visible = True

结束如果

结束子


''我要使用的事件处理程序:

Private Sub QuestionLinkCommand(ByVal sender As Object,ByVal e As

System.Web.UI.WebControls.CommandEventArgs)

Dim myconnection As New

SqlConnection(System.Configuration.ConfigurationMa nager.AppSettings(" connectionstring"))

Dim cmd As New SqlCommand(" SELECT subgroupid FROM questions WHERE

questionnumber ="& e.CommandArgument,myconnection)

myconnection.O pen()

Session(" subgroupid")= CInt(cmd.ExecuteScalar())

myconnection.Close()

End Sub


当我运行我的应用程序时,btnSubmit_Click中的代码按照我的预期工作(或者至少它看起来像b
)但是当我点击它时动态创建

LinkBut​​tons(变量名称问号链接),它们回发但不触发

QuestionLinkCommand方法(QuestionLinkCommand永远不会被执行

当我做一个调试会话)。我无法弄清楚为什么他们没有触发这个事件处理程序,因为我在创建

LinkBut​​tons时使用了AddHandler语句,并且eventhandler具有正确的签名。有没有什么?b $ b我做错了什么?谢谢。

-

Nathan Sokalski
nj * *******@hotmail.com
http:// www.nathansokalski.com/


不,如果我添加WithEvents关键字,我会收到消息:


''WithEvents''在本地变量声明中无效。


这是一个很好的建议(当我读到你的回复时我认为可能是

it),但遗憾的是它不是。还有其他想法吗?谢谢。

-

Nathan Sokalski
nj * *******@hotmail.com
http:// www.nathansokalski.com/


" Charlie" < c2 **** @ yahoo.com写了留言

news:43 ************************** ******** @ microsof t.com ...
No, if I add the WithEvents keyword I recieve the message:

''WithEvents'' is not valid on a local variable declaration.

That was a good suggestion (when I read your reply I thought that might be
it), but unfortunately it wasn''t. Any other ideas? Thanks.
--
Nathan Sokalski
nj********@hotmail.com
http://www.nathansokalski.com/

"Charlie" <c2****@yahoo.comwrote in message
news:43**********************************@microsof t.com...

尝试更改行

Dim questionlink正如New LinkBut​​ton()


to


Dim WithEvents questionlink As New LinkBut​​ton()

这有用吗?


" Nathan Sokalski"写道:
Try changing the line

Dim questionlink As New LinkButton()

to

Dim WithEvents questionlink As New LinkButton()

Does that work?
"Nathan Sokalski" wrote:

>我有一段代码,动态创建LinkBut​​tons以允许用户转到包含他们没有的问题的页面回答。
调用创建LinkBut​​ton的代码,以及AddHandler
行(我跑了一个Debug,发现它执行了这段代码,链接是
随后显示在页面上)。但是,单击LinkBut​​ton时,不会调用事件处理程序。以下是动态生成LinkBut​​tons以及我想要调用的事件处理程序的代码:

''生成LinkBut​​tons的代码:
Private Sub btnSubmit_Click(ByVal sender As Object,ByVal e As
System.Web.UI.ImageClickEventArgs)处理btnSubmit.Click
Me.submitanswers()
如果Me.completetest()那么
''我用来更新我的数据库的代码,不涉及这个问题因为Me.completetest()返回false
否则
Me.lblAnswered.Text = String.Format(" 75个问题中的{0}个答案(未回答:",CStr(Me.questionsanswered()))
将我的连接视为新的SqlConnection(System.Configuration.ConfigurationM anager.AppSettings( " connectionstring"))
Dim cmd As New SqlCommand("",myconnection)
Dim qnumreader As SqlDataReader
Dim insertafter As Integer =
Me.Form.Controls.IndexOf(Me.lblAnswered)+ 1
对于i as Integer = 1到75
cmd.CommandText = String.Format(" SELECT
questions.questionnumber FROM useranswers INNER JOIN问题
useranswers.questionid = questions.questionid WHERE
questions.questionnumber = {0} AND useranswers.testid = {1} AND
useranswers.userid = {2}" ,i,CStr(Session(testid)),
CStr(Session(userid)))
myconnection.Open()
qnumreader = cmd.ExecuteReader()
如果不是qnumreader.Read()则
Dim questionlink As New LinkBut​​ton()
questionlink.CausesValidation = False
questionlink.CommandArgument = i
questionlink.CssClass =" answerRED"
questionlink.EnableViewState = False
questionlink.Text = i& "
AddHandler questionlink.Command,AddressOf
Me.QuestionLinkCommand
Me.Form.Controls.AddAt(insertafter,questionlink)
insertafter + = 1
结束如果
myconnection.Close()
下一页
Me.lblCloseParen.Visible = True
结束如果
结束子

''我想要的事件处理程序使用:
Private Sub QuestionLinkCommand(ByVal sender As Object,ByVal e As
System.Web.UI.WebControls.CommandEventArgs)
Dim myconnection As New
SqlConnection(System.Configuration) .ConfigurationM anager.AppSettings(" connectionstring"))
Dim cmd As New SqlCommand(" SELECT subgroupid FROM questions WHERE
questionnumber ="& e.CommandArgument,myconnection)
myconnection .Open()
Session(" subgroupid")= CInt(cmd.ExecuteScalar())
myconnection.Clo se()
End Sub

当我运行我的应用程序时,btnSubmit_Click中的代码按照我的预期工作(或者至少它看起来像是这样),但是当我点击动态创建的LinkBut​​tons(变量名称问题链接)时,它们会回发但不会触发QuestionLinkCommand方法(QuestionLinkCommand永远不会被执行
我做一个调试会话)。我无法弄清楚为什么它们不会触发这个事件处理程序,因为我在创建
LinkBut​​tons时使用AddHandler语句,并且eventhandler具有正确的签名。有什么我做错了吗?谢谢。
-
Nathan Sokalski
nj ******** @ hotmail.com
http://www.nathansokalski.com/



将问题链接的声明放在btnSubmit_Click代码之外

block,in一般声明区域...


public withevents questionlink as new LinkBut​​ton()

在你的代码块中,删除昏暗的questionlink行。


您也可以将链接按钮作为公共或朋友的范围。


这样做有效吗?


Nathan Sokalski ;写道:
Put the declaration of questionlink outside of the btnSubmit_Click code
block, in the general declarations area...

public withevents questionlink as New LinkButton()
inside your codeblock, remove the dim questionlink line.

you could also scope the linkbutton as public or friend.

does that work?

"Nathan Sokalski" wrote:

不,如果我添加WithEvents关键字我收到消息:


''WithEvents''不是在本地变量声明上有效。


这是一个很好的建议(当我读到你的回复时我认为可能是

),但遗憾的是它不是'' T。还有其他想法吗?谢谢。

-

Nathan Sokalski
nj * *******@hotmail.com
http:// www.nathansokalski.com/


" Charlie" < c2 **** @ yahoo.com写了留言

news:43 ************************** ******** @ microsof t.com ...
No, if I add the WithEvents keyword I recieve the message:

''WithEvents'' is not valid on a local variable declaration.

That was a good suggestion (when I read your reply I thought that might be
it), but unfortunately it wasn''t. Any other ideas? Thanks.
--
Nathan Sokalski
nj********@hotmail.com
http://www.nathansokalski.com/

"Charlie" <c2****@yahoo.comwrote in message
news:43**********************************@microsof t.com...

尝试更改行

Dim questionlink正如New LinkBut​​ton()


to


Dim WithEvents questionlink As New LinkBut​​ton()

这有用吗?

" Nathan Sokalski"写道:
Try changing the line

Dim questionlink As New LinkButton()

to

Dim WithEvents questionlink As New LinkButton()

Does that work?
"Nathan Sokalski" wrote:

我有一段我的代码动态创建LinkBut​​tons以允许用户转到包含问题的页面的
没有回答。

调用创建LinkBut​​ton的

代码,以及AddHandler



(我运行了一个Debug,看到它执行了这段代码,之后页面上显示的链接是

)。但是,当单击LinkBut​​ton时,事件处理程序不会被称为

。以下是动态

生成的代码

LinkBut​​tons以及我想要调用的事件处理程序:


''生成LinkBut​​tons的代码:

Private Sub btnSubmit_Click(ByVal sender As Object,ByVal e As

System.Web.UI.ImageClickEventArgs)处理btnSubmit.Click

Me.submitanswers()

如果Me.completetest()那么

''用于更新我的数据库的代码,不参与此

问题,因为Me.completetest()返回false

否则

Me.lblAnswered.Text = String.Format(&n; 75个问题中的{0}

已回答(未回答:",CStr(Me.questionsanswered()))

Dim myconnection As New

SqlConnection(System.Configuration .ConfigurationMa nager.AppSettings(" connectionstring"))

Dim cmd As New SqlCommand("",myconnection)

Dim qnumreader As SqlDataReader

Dim insertafter As Integer =

Me.Form.Controls.IndexOf(Me.lblAnswered)+ 1

For i As Integer = 1到75

questions.questionnumber FROM useranswers INNER JOIN问题ON

useranswers.questionid = questions.questionid WHERE

questions.questionnumber = {0} AND useranswers.testid = {1} AND

useranswers.userid = {2}", i,CStr(会话(testid)),

CStr(会话(userid)))

myconnection.Open()

qnumreader = cmd.ExecuteReader()

如果不是qnumreader.Read()那么

Dim questionlink As New LinkBut​​ton()

questionlink .CausesValidation = False

questionlink.CommandArgument = i

questionlink.CssClass =" answerRED"

questionlink.EnableViewState = False

questionlink.Text = i& "

AddHandler questionlink.Command,AddressOf

Me.QuestionLinkCommand

Me.Form.Controls.AddAt(insertafter,questionlink)

insertafter + = 1

结束如果

myconnection.Close()

下一页

我.lblCloseParen.Visible = True

结束如果

结束子


''我要使用的事件处理程序:

Private Sub QuestionLinkCommand(ByVal sender As Object,ByVal e As

System.Web.UI.WebControls.CommandEventArgs)

Dim myconnection As New

SqlConnection(System.Configuration.ConfigurationMa nager.AppSettings(" connectionstring"))

Dim cmd As New SqlCommand(" SELECT subgroupid FROM questions WHERE

questionnumber ="& e.CommandArgument,myconnection)

myconnection.O pen()

Session(" subgroupid")= CInt(cmd.ExecuteScalar())

myconnection.Close()

End Sub


当我运行我的应用程序时,btnSubmit_Click中的代码按预期工作

(或

至少看起来像它但是,当我点击动态创建的

LinkBut​​tons(变量名称问题链接)时,它们会回发但是没有

触发

QuestionLinkCommand方法(当我进行调试会话时,QuestionLinkCommand永远不会执行

执行

)。我无法弄清楚为什么他们不会触发

这个eventhandler,因为我在创建

LinkBut​​tons时使用AddHandler语句,而eventhandler已经正确的签名。有没有什么?b $ b我做错了什么?谢谢。

-

Nathan Sokalski
nj * *******@hotmail.com
http:// www.nathansokalski.com/






这篇关于AddHandler无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆