VB6.0 mshflexgrid问题请高手解答! 输入表格使用TEXTBOX+mshflexgrid完成。

feicui999 2009-07-29 09:01:43
VB6.0 mshflexgrid问题请高手解答! 输入表格使用TEXTBOX+mshflexgrid完成。
1、限制输入(某列只可输入数值也就是说。格式为“100.00”)
2、首行行高 (首行窄,其他行需要高)
3、某列不可编辑(我读出数据库中的索引编号用于超看,但怕客户改掉所以,想锁定不可修改某列)
4、如何检测增加数据未保存是否退出。提示用户应保存还是放弃。
...全文
579 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊孩子开学喽 2009-08-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 feicui999 的回复:]
谢谢各位的回答!可没有一个回答的是点上的。
5楼的老师你看错了。我是TEXTBOX+mshflexgrid不是msflexgrid,因此程序没法参考。
我简单的看了看,学到了别的新东西。还是很感谢的!
问题1:输入限制。(主要功能,使某列只能输入数值也就是,数字和小数点。并且小数点只能出现一次。)我通过网络找到了些类似代码,都不能有效控制,因为MSHFLEXGRID的输入是要出发很多事件的。例如:MSHFLEXGRID_KeyPress、TEXTBOX_KeyPress、GotFocus、LeaveCell、EnterCell。我调试半天的效果是输入的第一个英文字母被赋值到TEXTBOX控件了,后面在输入的字符的确能被限制住,可这样保存时数据类型一样会错误,软件会损坏的。
问题2:MSHFLEXGRID控件的确有个RowHeightMin属性可以设置最小行高,
MSHFLEXGRID.RowHeight(1) = 280
MSHFLEXGRID.RowHeightMin=500
可我要的效果是第一行扁些,其他行高,这样的设置,第一行也成了500,我改怎么解决问题。
问题3:我已解决,设定FIXedcols即可。
问题4:检测数据已录入未保存退出,事件可以写在退出按钮上,可这样会降低保存速度。不知道有没有更好的办法,我想知道大家遇到这些问题了吗?怎么处理的。

[/Quote]

MSHFLEXGRID还真没用过,一向都是用MSFLEXGRID,貌似两者差别不大,不过既然可以逐行设置行高,那不就是可以解决你的问题了么
feicui999 2009-08-01
  • 打赏
  • 举报
回复
哦。可能是我别的逻辑方面有错误。我再查吧!
logan0279 2009-08-01
  • 打赏
  • 举报
回复
测试了下你的代码,仍然正常!不能输入英文字母.

目前我的MSHFlexGrid中只添加了MSHFlexGrid_Click事件!
feicui999 2009-07-31
  • 打赏
  • 举报
回复
8楼的哥们!
限定第5列只能输入数字不能使用利用TextBox_KeyPress 事件么?
你实际测试会发现TextBox_KeyPress 事件有问题.因为 数据是先触发MSHFLEXGRID事件之后数据传入TextBox_KeyPress事件,我在TextBox_KeyPress处作限制后,每次的第一个英文字母总能被传入,而后面的字母就能被有效阻止了.这样明显事件处理不完整,存在逻辑缺陷.因为想问大家实际使用结果.
因为我程序已经开发完毕,为了减少软件BUG,希望限制用户错误操作,减少维护量.所以才实际测试这些问题的.
目前网上大都是些使用MSHFLEXGRID查询代码,实际的录入 增行 删行 保存行 事件处理各种情况没有现成的代码可供参考.希望那位仁兄提供点真实能用的纯粹的完善的MSHFLEXGRID事件处理代码.
我们解决一个问题的方法有很多,但总是不完美,我希望大家可以考虑完整经过实际使用测试.
feicui999 2009-07-31
  • 打赏
  • 举报
回复
第二个问题,设置某行行高:
MSHFLEXGRID.RowHeightMin=?
MSHFLEXGRID.RowHeight(1) = ?
经实际测试不可以.因为MIN已经是最小行高,因此MSHFLEXGRID.RowHeight(1) = ? 如果比MSHFLEXGRID.RowHeightMin=? 小则设置无效.
我经过一翻研究,发现只能使用循环行高来设置,但一旦增加行,需要重新设置新行,因为系统默认按照字体大小设置的行高.
另外请问VF8现在用的人多吗.我觉得相对DELFILE VB控件的功能真实可怜.
logan0279 2009-07-31
  • 打赏
  • 举报
回复
第二个问题,设置某行行高:
MSHFLEXGRID.RowHeightMin=?
MSHFLEXGRID.RowHeight(1) = ?

这样不可以么?
logan0279 2009-07-31
  • 打赏
  • 举报
回复
限定第5列只能输入数字不能使用利用TextBox_KeyPress 事件么?
feicui999 2009-07-31
  • 打赏
  • 举报
回复

[Quote=引用 16 楼 feicui999 的回复:]
txtedit1_KeyPress
事件截图
[/Quote]
feicui999 2009-07-31
  • 打赏
  • 举报
回复


txtedit1_KeyPress
事件截图
feicui999 2009-07-31
  • 打赏
  • 举报
回复
我刚学不久。不过接触很久了。TextBox_KeyPress在我这里,怎么第一个值总是能传入呢。等我贴图。
Private Sub txtedit1_KeyPress(KeyAscii As Integer)

Dim Numbers As String '允许输入的字符
If flex1.Col = 5 Then '第5列
' MsgBox "flex1.Col = 5"
Numbers = "1234567890" + Chr(46) + Chr(8)
If InStr(Numbers, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End If

'删除回车符,以消除嘟嘟声。
If KeyAscii = Asc(vbCr) Then KeyAscii = 0
End Sub

yachong 2009-07-31
  • 打赏
  • 举报
回复
这个东西不难,关键是要细心,不怕烦琐。
logan0279 2009-07-31
  • 打赏
  • 举报
回复
你的MSHFlexGrid事件分别有哪些?

我刚试了下,TextBox_KeyPress事件一切,可以按我要求控制输入呀!
logan0279 2009-07-31
  • 打赏
  • 举报
回复
呵呵,我最近在学习VB,正打算用TextBox结合MSHFlexGrid来做的,所以有此一问.

增加新行的时候只需要设置新行的高度就可以了呀,不需要再循环所有行的吧.

我学习VB时间不短,可一直断断续续的,没怎么学好,兄弟不介意的话,可以加我QQ,以后有什么问题可以向你请教.
feicui999 2009-07-30
  • 打赏
  • 举报
回复
''限定第5列只能输入数字。方法一
'Private Sub flex1KeyPressEdit(ByVal Row As Long, ByVal Col As Long, KeyAscii As Integer)
'Dim Numbers As String '允许输入的字符
'If flex1.Col = 5 Then '第5列
' MsgBox "flex1.Col = 5"
' Numbers = "1234567890" + Chr(46) + Chr(8)
' If InStr(Numbers, Chr(KeyAscii)) = 0 Then
' KeyAscii = 0
' End If
'End If
'End Sub

''限定第5列只能输入数字。方法二
'Private Sub flex1_change()
'MsgBox "第5列必须输入数字"
' If flex1.Col = 5 Then
' If Not IsNumeric(.Text) Then
' MsgBox "第5列必须输入数字"
' End If
' End If
' End Sub
feicui999 2009-07-30
  • 打赏
  • 举报
回复
谢谢各位的回答!可没有一个回答的是点上的。
5楼的老师你看错了。我是TEXTBOX+mshflexgrid不是msflexgrid,因此程序没法参考。
我简单的看了看,学到了别的新东西。还是很感谢的!
问题1:输入限制。(主要功能,使某列只能输入数值也就是,数字和小数点。并且小数点只能出现一次。)我通过网络找到了些类似代码,都不能有效控制,因为MSHFLEXGRID的输入是要出发很多事件的。例如:MSHFLEXGRID_KeyPress、TEXTBOX_KeyPress、GotFocus、LeaveCell、EnterCell。我调试半天的效果是输入的第一个英文字母被赋值到TEXTBOX控件了,后面在输入的字符的确能被限制住,可这样保存时数据类型一样会错误,软件会损坏的。
问题2:MSHFLEXGRID控件的确有个RowHeightMin属性可以设置最小行高,
MSHFLEXGRID.RowHeight(1) = 280
MSHFLEXGRID.RowHeightMin=500
可我要的效果是第一行扁些,其他行高,这样的设置,第一行也成了500,我改怎么解决问题。
问题3:我已解决,设定FIXedcols即可。
问题4:检测数据已录入未保存退出,事件可以写在退出按钮上,可这样会降低保存速度。不知道有没有更好的办法,我想知道大家遇到这些问题了吗?怎么处理的。
熊孩子开学喽 2009-07-30
  • 打赏
  • 举报
回复
看看这个: http://download.csdn.net/source/369462
TEXTBOX+MSFLEXGRID的编辑功能都在里面了。至于限制输入或显示格式什么的无非就是在TEXT的输入事件中加代码转换,比如FORMAT函数ISNURMERIC函数等等,你可以自己参考MSDN. 行高问题,我想,如果你真的仔细研究过MSFLEXGRID这个控件的属性和方法就不应该再问了。至于锁定行也是蛮简单,因为MSFLEXGRID本来就是不可编辑的,你的代码只是利用TEXTBOX来“输入”,因此你只要定义好在某些行上面TEXTBOX不可输入就行,比如LOCKED属性。程序未保存退出提醒在我给你的历程里面自己找。

只提供思路,不提供代码
clear_zero 2009-07-30
  • 打赏
  • 举报
回复
你现在设计到哪了?

100.00可以用FORMAT(value,"0.00")
futosky 2009-07-30
  • 打赏
  • 举报
回复
基于技术很烂,认为100.00这种格式写个判断过程得了
feicui999 2009-07-30
  • 打赏
  • 举报
回复
大哥。我那说是作业了。我是在开发程序。汗!
孤独剑_LPZ 2009-07-29
  • 打赏
  • 举报
回复
又是个只发作业的,这年头都怎么了?
作业要自己做,不会的地方可以帮你解答

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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