以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  keydown事件问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=145052)

--  作者:刘林
--  发布时间:2020/1/6 20:08:00
--  keydown事件问题


If e.KeyCode = Keys.Enter Then
    e.sender.WriteValue
    If val(StrToNarrow(e.Sender.Text)) > val(e.Form.Controls("textbox2").text) Then
        MessageBox.show("请注意,你输入值大于了设定值","提示",MessageBoxButtons.OK)
        e.Sender.Select
        e.Sender.Text = ""
    Else
        If e.sender.text = ""
            e.sender.value = "0"
        End If
        \'e.Form.Controls("textbox10").Select
        If Tables("小学统分(改)_table1").Position < Tables("小学统分(改)_table1").Rows.Count-1 Then
            Tables("小学统分(改)_table1").Position += 1
            
            DataTables("成绩").Save()
        End If        
    End If    
    e.Cancel = True
End If


老师,请问我在NumericComboBox的keydown事件中实现,当box中不输入内容直接回车时向表中输入0,因为表中不为零算平均时好像是不算,这样能在零的情况下不输入,原来都可以,现在不得行了呢,哪里有问题?

--  作者:有点蓝
--  发布时间:2020/1/6 20:19:00
--  
换个位置
……
        End If        
    End If    
    e.sender.WriteValue
    e.Cancel = True
End If

--  作者:刘林
--  发布时间:2020/1/6 20:23:00
--  
还是不行,并且这样输入什么数据都不能输入到表了
[此贴子已经被作者于2020/1/6 20:24:24编辑过]

--  作者:刘林
--  发布时间:2020/1/6 20:47:00
--  
If e.KeyCode = Keys.Enter Then
    e.sender.WriteValue
    If val(StrToNarrow(e.Sender.Text)) > val(e.Form.Controls("textbox2").text) Then
        MessageBox.show("请注意,你输入值大于了设定值","提示",MessageBoxButtons.OK)
        e.Sender.Select
        e.Sender.Text = ""
    Else
        If e.sender.text = ""
            e.sender.value = "0"
        End If
        e.Sender.Select
        If Tables("小学统分(改)_table1").Position < Tables("小学统分(改)_table1").Rows.Count-1 Then
            Tables("小学统分(改)_table1").Position += 1
            DataTables("成绩").Save()
        End If
    End If
    e.Cancel = True
End If
老师,经测试,不要红色部分,可以在不输入数字回车会自动输入0,但我需要回车后自动换行,怎么办?

--  作者:有点蓝
--  发布时间:2020/1/6 20:47:00
--  
我测试是可以的。上传具体实例说明。


--  作者:刘林
--  发布时间:2020/1/6 20:56:00
--  
If e.KeyCode = Keys.Enter Then
    e.sender.WriteValue
    If val(StrToNarrow(e.Sender.Text)) > val(e.Form.Controls("textbox2").text) Then
        MessageBox.show("请注意,你输入值大于了设定值","提示",MessageBoxButtons.OK)
        e.Sender.Select
        e.Sender.Text = ""
    Else
        If e.sender.text = ""
            e.sender.value = "0"
            e.Form.Controls("textbox2").Select   ‘窗口不一个无关的控件
            e.Form.Controls("textbox4").Select   、当前控件
            e.sender.select
        End If
        If Tables("小学统分(改)_table1").Position < Tables("小学统分(改)_table1").Rows.Count-1 Then
            Tables("小学统分(改)_table1").Position += 1            
            DataTables("成绩").Save()
        End If        
    End If    
    e.Cancel = True
End If


老师,终于发现,当加上红色的代码,选定其他控件,然后再回到当前输入框就可以,如直直接用蓝色代码就不得行,请问是什么原因,怎么改进呢,我觉得这样写有点别扭

--  作者:有点蓝
--  发布时间:2020/1/6 21:54:00
--  
If e.KeyCode = Keys.Enter Then

    If val(StrToNarrow(e.Sender.Text)) > val(e.Form.Controls("textbox2").text) Then
        MessageBox.show("请注意,你输入值大于了设定值","提示",MessageBoxButtons.OK)
        e.Sender.Select
        e.Sender.Text = ""
    Else
        If e.sender.text = ""
            e.sender.value = "0"
        End If
    e.sender.WriteValue \'放在这个位置试试
        e.Sender.Select
        If Tables("小学统分(改)_table1").Position < Tables("小学统分(改)_table1").Rows.Count-1 Then
            Tables("小学统分(改)_table1").Position += 1
            DataTables("成绩").Save()
        End If
    End If
    e.Cancel = True
End If

--  作者:刘林
--  发布时间:2020/1/6 22:20:00
--  
If e.KeyCode = Keys.Enter Then
    If val(StrToNarrow(e.Sender.Text)) > val(e.Form.Controls("textbox2").text) Then
        MessageBox.show("请注意,你输入值大于了设定值","提示",MessageBoxButtons.OK)
        e.Sender.Select
        e.Sender.Text = ""
    Else
        If e.sender.text = ""
            e.sender.value = "0"
        End If
        e.sender.WriteValue \'放在这个位置试试
        e.Sender.Select
        If Tables("小学统分(改)_table1").Position < Tables("小学统分(改)_table1").Rows.Count-1 Then
            Tables("小学统分(改)_table1").Position += 1
        Else
            messagebox.show("已到最后一个了")
        End If
    End If
    DataTables("成绩").Save()
    e.Cancel = True
End If


这个可以了,但  e.Sender.Select 不能选中文本,如某行有个数25,要想换行是文件框内的25被选中,这样如果要改直接输入,但现在是光标在25的前面,如果输入24就成了2425,这样不方便,请问怎么实现选中

--  作者:有点蓝
--  发布时间:2020/1/6 22:51:00
--  
        e.Sender.Select
        e.Sender.SelectionStart = e.Sender.text.length

--  作者:刘林
--  发布时间:2020/1/7 7:23:00
--  
SelectionStart不是NumericComboBox成员