AddHandler无法正常工作 [英] AddHandler not working
问题描述
我的代码部分动态创建了LinkButtons,允许用户转到包含他们未回答的问题的页面。调用创建LinkButton的
代码,以及AddHandler行
(我运行了一个Debug,发现它执行了这段代码,链接是
)。但是,单击LinkButton时,不会将事件处理程序称为
。以下是动态生成LinkButtons以及我想要调用的事件处理程序的代码:
''生成LinkButtons的代码:
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 LinkButton()
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
)但是当我点击动态创建的
LinkButtons(变量名称questionlink),它们回发但不触发QuestionLinkCommand方法(QuestionLinkCommand永远不会被执行
当我进行调试会话时)。我无法弄清楚为什么他们没有触发这个事件处理程序,因为我在创建
LinkButtons时使用了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新的LinkButton()
to
Dim WithEvents questionlink As New LinkButton()
那工作?
" Nathan Sokalski"写道:
Try changing the line
Dim questionlink As New LinkButton()
to
Dim WithEvents questionlink As New LinkButton()
Does that work?
"Nathan Sokalski" wrote:
我有一段我的代码动态创建LinkButtons以允许用户转到包含问题的页面的
没有回答。调用创建LinkButton的
代码,以及AddHandler行
(我运行了一个Debug,发现它执行了这段代码,链接是
)。但是,单击LinkButton时,不会将事件处理程序称为
。下面是动态生成LinkButtons以及我想要调用的事件处理程序的代码:
''生成LinkButtons的代码:
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 LinkButton()
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
)但是当我点击它时动态创建
LinkButtons(变量名称问号链接),它们回发但不触发
QuestionLinkCommand方法(QuestionLinkCommand永远不会被执行
当我做一个调试会话)。我无法弄清楚为什么他们没有触发这个事件处理程序,因为我在创建
LinkButtons时使用了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 LinkButton()
to
Dim WithEvents questionlink As New LinkButton()
这有用吗?
" Nathan Sokalski"写道:
Try changing the line
Dim questionlink As New LinkButton()
to
Dim WithEvents questionlink As New LinkButton()
Does that work?
"Nathan Sokalski" wrote:
>我有一段代码,动态创建LinkButtons以允许用户转到包含他们没有的问题的页面回答。
调用创建LinkButton的代码,以及AddHandler
行(我跑了一个Debug,发现它执行了这段代码,链接是
随后显示在页面上)。但是,单击LinkButton时,不会调用事件处理程序。以下是动态生成LinkButtons以及我想要调用的事件处理程序的代码:
''生成LinkButtons的代码:
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 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
结束如果
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中的代码按照我的预期工作(或者至少它看起来像是这样),但是当我点击动态创建的LinkButtons(变量名称问题链接)时,它们会回发但不会触发QuestionLinkCommand方法(QuestionLinkCommand永远不会被执行
我做一个调试会话)。我无法弄清楚为什么它们不会触发这个事件处理程序,因为我在创建
LinkButtons时使用AddHandler语句,并且eventhandler具有正确的签名。有什么我做错了吗?谢谢。
-
Nathan Sokalski
nj ******** @ hotmail.com
http://www.nathansokalski.com/
将问题链接的声明放在btnSubmit_Click代码之外
block,in一般声明区域...
public withevents questionlink as new LinkButton()
在你的代码块中,删除昏暗的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 LinkButton()
to
Dim WithEvents questionlink As New LinkButton()
这有用吗?
" Nathan Sokalski"写道:
Try changing the line
Dim questionlink As New LinkButton()
to
Dim WithEvents questionlink As New LinkButton()
Does that work?
"Nathan Sokalski" wrote:
我有一段我的代码动态创建LinkButtons以允许用户转到包含问题的页面的
没有回答。
调用创建LinkButton的
代码,以及AddHandler
行
(我运行了一个Debug,看到它执行了这段代码,之后页面上显示的链接是
)。但是,当单击LinkButton时,事件处理程序不会被称为
。以下是动态
生成的代码
LinkButtons以及我想要调用的事件处理程序:
''生成LinkButtons的代码:
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 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
结束如果
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中的代码按预期工作
(或
至少看起来像它但是,当我点击动态创建的
LinkButtons(变量名称问题链接)时,它们会回发但是没有
触发
QuestionLinkCommand方法(当我进行调试会话时,QuestionLinkCommand永远不会执行
执行
)。我无法弄清楚为什么他们不会触发
这个eventhandler,因为我在创建
LinkButtons时使用AddHandler语句,而eventhandler已经正确的签名。有没有什么?b $ b我做错了什么?谢谢。
-
Nathan Sokalski
nj * *******@hotmail.com
http:// www.nathansokalski.com/
这篇关于AddHandler无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!