显示下一条信息时textbox不更新或是延迟.求教

htpower 2008-03-19 01:32:36
为何当我快速点击PictureBox3显示下一条信息的时候,我的textbox2的TEXT不会跟着我的点击速度去更新?总会有延迟,或是根本就是上一条信息的值.求各位大大指点!

Imports EchoClass.EchoClassShow
Public Class HandWorkWater

Private Sub SimpleButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton4.Click
Me.Dispose()
End Sub
Private Sub userinformation(ByVal userid As Integer, ByVal upordown As String)
Dim sql As String
sql = "SELECT "
Select Case upordown
Case "up", "down", "maxup", "maxdown"
If IsNumeric(TextBox2.Text) = False Then
MsgBox("排序号必须是数字!")
Return
End If
sql += "top 1 * "
Case Else
sql += "* "
End Select
sql += "FROM 用户资料 "
Select Case upordown
Case "up"
sql += "WHERE (排序号 < " & Label11.Text & ") And (用户区域 = " & userqyid(userid) & ") and 水表状态<>2 and 水表状态<>3 and 水表状态<>4 and 水表状态<>10 order by 排序号 desc"
Case "down"
sql += "WHERE (排序号 > " & Label11.Text & ") And (用户区域 = " & userqyid(userid) & ") and 水表状态<>2 and 水表状态<>3 and 水表状态<>4 and 水表状态<>10 order by 排序号 asc"
Case "maxup"
sql += "WHERE (用户区域 = " & userqyid(userid) & ") and 水表状态<>2 and 水表状态<>3 and 水表状态<>4 and 水表状态<>10 order by 排序号 asc"
Case "maxdown"
sql += "WHERE (用户区域 = " & userqyid(userid) & ") and 水表状态<>2 and 水表状态<>3 and 水表状态<>4 and 水表状态<>10 order by 排序号 desc"
Case Else
sql += "WHERE (id = " & CStr(userid) & ")"
End Select
'EchoDS.Tables("information").Reset()
sqlread(sql, "information")
If EchoDS.Tables("information").Rows.Count <= 0 Then
'EchoDS.Reset()
EchoDS.Tables("information").Reset()
MsgBox("用户不存在!请重新查询用户!", MsgBoxStyle.Information)
Return
End If
Select Case (EchoDS.Tables("information").Rows(0).Item("水表状态"))
Case 2, 3, 4, 10
If CheckBox1.Checked = False Then
MsgBox("该用户已销户或拆表!不可操作!")
TextBox1.Focus()
myGotFocus(TextBox1)
Exit Sub
Else
MsgBox("该用户已销户或拆表!不可操作!")
Me.PictureBox3_Click(Nothing, Nothing)
End If
End Select
If stationmanage = True Then
Dim userqy As Object = Nothing
sql = "select * from 区域信息 where 抄表员='" & sysuser & "'"
sqlread(sql, "区域")
If EchoDS.Tables("区域").Rows.Count <= 0 Then
EchoDS.Tables("区域").Reset()
MsgBox("您无权用水量管理!请联系系统管理员!", MsgBoxStyle.Exclamation)
Return
Else

For i As Integer = 0 To EchoDS.Tables("区域").Rows.Count - 1
If i = 0 Then
userqy = EchoDS.Tables("区域").Rows(i).Item("id")
Else
userqy += "," & EchoDS.Tables("区域").Rows(i).Item("id")
End If
Next
End If
Dim k As Integer
EchoDS.Tables("区域").Reset()
Try
If userqy() <> "" Then
userqy = Split(userqy, ",")
End If
For m As Integer = 0 To UBound(userqy) - 1
If Int(EchoDS.Tables("information").Rows(0).Item("用户区域")) - Int(userqy(m)) <> 0 Then
k = 0
Else
k = 1
Exit For
End If
Next
If k = 0 Then
MsgBox("用户所在区域不属于您的管辖范围!您不可以操作!")
TextBox1.Focus()
myGotFocus(TextBox1)
Exit Sub
End If
Catch ex As Exception
MsgBox("用户所在区域不属于您的管辖范围!您不可以操作!")
TextBox1.Focus()
myGotFocus(TextBox1)
Exit Sub
End Try
End If
With EchoDS.Tables("information").Rows(0)
If .Item("减免水量") > 0 Then
MsgBox("该用户享有用水优惠!当前优惠水量: " & .Item("减免水量") & "立方米")
End If
TextBox1.Text = .Item("id")
Label3.Text = .Item("用户名").ToString
Label5.Text = .Item("用户地址").ToString
Label7.Text = .Item("人口数") & "人"
Label9.Text = Format(.Item("预付款余额"), "#0.00")
Label11.Text = .Item("排序号").ToString
Label16.Text = .Item("备注").ToString
XtraTabPage2.Text = .Item("用户名").ToString & " 的用水量记录"
listwateruse(TextBox1.Text.Trim, .Item("滞纳金收取率"))
DateTimePicker1.Value = uptime(userid)
DateTimePicker2.Value = nowtime()
TextBox2.Text = upwater(userid)
TextBox3.Text = 0.0
TextBox4.Text = 0.0
TextBox5.Text = 0.0
End With
userwaterbill(userid)
TextBox3.Focus()
End Sub
Private Sub HandWorkWater_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.DoubleBuffered = True
For i As Integer = 2005 To Year(nowtime()) + 1
ComboBox1.Items.Add(i)
Next
For i As Integer = 1 To 12
ComboBox2.Items.Add(i)
Next
ComboBox1.Text = Year(nowtime())
ComboBox2.Text = Month(nowtime())
If editwaterinfo = False Then
TextBox5.ReadOnly = True
Else
TextBox5.ReadOnly = False
End If
End Sub
Private Function uptime(ByVal userid As Integer) As Date
Dim t As Date
sqlread("SELECT 本期时间 FROM 用水量 WHERE 用户编号 = " & CStr(userid) & " ORDER BY 本期时间 DESC", "上时间")
If EchoDS.Tables("上时间").Rows.Count <= 0 Then
EchoDS.Tables("上时间").Reset()
t = nowtime()
'Return nowtime()
Else
t = EchoDS.Tables("上时间").Rows(0).Item("本期时间")
EchoDS.Tables("上时间").Reset()
End If
Return t
End Function
Private Function upwater(ByVal userid As Integer) As Integer
Dim j As Integer
sqlread("SELECT 本期底数 FROM 用水量 WHERE 用户编号 = " & CStr(userid) & " ORDER BY 本期时间 DESC", "上底数")
If EchoDS.Tables("上底数").Rows.Count <= 0 Then
EchoDS.Tables("上底数").Reset()
j = 0
Else
j = EchoDS.Tables("上底数").Rows(0).Item("本期底数")
EchoDS.Tables("上底数").Reset()
End If
Return j
End Function
Private Sub SimpleButton5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton5.Click
If TextBox1.Text.Trim = "" Then
TextBox1.Focus()
myGotFocus(TextBox1)
MsgBox("用户编号不能为空且仅能为数字!", MsgBoxStyle.Exclamation)
Return
End If
Dim userinformation As New UserInformation
userinformation.Text = "用户详细信息"
userinformation.TextBox1.Text = TextBox1.Text.Trim
If MainForm.OpenOnce(userinformation) = False Then
userinformation.MdiParent = Me.MdiParent
userinformation.Show()
userinformation.SimpleButton1.PerformClick()
End If
End Sub
Private Sub PictureBox3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click
If IsNumeric(TextBox1.Text.Trim) = False Then
MsgBox("用户编号仅能为数字!", MsgBoxStyle.Information)
Return
Else
userinformation(TextBox1.Text.Trim, "down") '"up", "down", "maxup", "maxdown"
End If
End Sub
End Class
...全文
123 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
htpower 2008-03-20
  • 打赏
  • 举报
回复
是我错了,错在UserInformation()这个查询过程里,我一直调用USERID
谢谢大家给我的指教,让我学到了不少!马上结贴去!
晓轩 2008-03-20
  • 打赏
  • 举报
回复
我所说的都时理论上的,需要你自己验证。所以你的try catch最好抛出个messge。
创建一个GC函数,在这个函数里释放sqlread里声明的一些变量的资源如 sqlcmd.Dispose()。
当你每次进入sqlread时首先调用GC函数,然后执行你的代码
herol 2008-03-20
  • 打赏
  • 举报
回复
只能想尽一切办法,缩短点PictureBox3后所执行的操作,执行的操作越少,执行的速度自然越快
htpower 2008-03-20
  • 打赏
  • 举报
回复

Public Shared Function sqlread(ByVal sql As String, ByVal tablename As String)
Try
Dim sqlcmd As New SqlDataAdapter(sql, Conn)
sqlcmd.Fill(EchoDS, tablename)
Catch ex As Exception
EchoDS.Tables(tablename).Reset()
Return Nothing
End Try
Return Nothing
End Function


请教6楼,我如何才能做到你说的这一点呢?
晓轩 2008-03-20
  • 打赏
  • 举报
回复
提点看法:1.textbox刷新数据的速度和你读取数据库数据的速度有关
当你多次点击时上次的点击事件还没有处理完,如果数据量大的话可能会出现假死现象。
可以只执行最新的点击事件,终止之前的所有点击。
steven_srl 2008-03-20
  • 打赏
  • 举报
回复
昨天说的方法,延时有没有解决掉??????????

sqlread(sql,"information")是你自己写的函数吧,贴一下,看看对不对
htpower 2008-03-19
  • 打赏
  • 举报
回复
还是保持原样啊,还是不能向下一条~怎么办?
gyc 2008-03-19
  • 打赏
  • 举报
回复
因为你每次都给从数据库中提取数据~

试着将需要的数据先缓存下来,再用
steven_srl 2008-03-19
  • 打赏
  • 举报
回复
TextBox2.Text = upwater(userid)
是得到upwater函数的返回值,而upwater又要连接数据库,查询数据,所以当然会产生延时咯

要看到数据一起出来的话就先做upwater运算,然后一起刷新数据,试试看放在TextBox1.Text前看看
水如烟 2008-03-19
  • 打赏
  • 举报
回复
那是因为你点得太快的缘故.

说笑了.

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧