社区
界面
帖子详情
[求助]请推荐一个类似表格的数据输入控件或实现方法
smartboyme
2003-05-30 06:00:57
原来用BCB的,现在要用VC做个程序。
目前程序中需要在一个对话框中输入5列,多行(50行以内)的数据。
要求可以手工一行一行的添加或者从文本文件导入。
我想用一个类似表格的控件,可以直接在控件上编辑数据。
命令按钮因此只需要“导入”(从文本文件导入),“添加”,“插入”,“删除”
其操作有点象表格。
希望各位朋友推荐一个vc下的控件,或者activex控件,但是不需要数据库连接。
最好有简单的实现思路。
谢谢了。
...全文
247
5
打赏
收藏
[求助]请推荐一个类似表格的数据输入控件或实现方法
原来用BCB的,现在要用VC做个程序。 目前程序中需要在一个对话框中输入5列,多行(50行以内)的数据。 要求可以手工一行一行的添加或者从文本文件导入。 我想用一个类似表格的控件,可以直接在控件上编辑数据。 命令按钮因此只需要“导入”(从文本文件导入),“添加”,“插入”,“删除” 其操作有点象表格。 希望各位朋友推荐一个vc下的控件,或者activex控件,但是不需要数据库连接。 最好有简单的实现思路。 谢谢了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
smartboyme
2003-06-01
打赏
举报
回复
谢谢两位的热情帮助
我根据这个
http://www.codeguru.com/listview/ListEditor1.shtml
的提示,自己派生了一个CListViewExt类。
可以达到自己的功能了。
不过,还需要点完善,主要是根据自己的定制。
谢谢了。
smartboyme
2003-05-31
打赏
举报
回复
我看了一下,这个例子不错,可能是我需要的。
http://www.codeguru.com/listview/ListEditor1.shtml
不过作者没有给出太详细的步骤,没有给出demo
有朋友做过这个吗?
smartboyme
2003-05-31
打赏
举报
回复
谢谢关注
对vc的控件不是很熟悉。
flexgrid可以允许编辑吗?向表格一样的直接编辑。
shuda
2003-05-31
打赏
举报
回复
flexgrid是不可以编辑的,你要想编辑自己还要做点手脚。
我见过一个的方法是这样:
摘要:本文主要介绍了一种通过控件聚合技术来为网格控件FlexGrid增添PickList功能的方法。
前言
在对数据库进行数据录入时,PickList功能能极大的方便用户,在dELPHI程序中的DBgrid控件就直接提供了PickList功能,但VB和VC下的DBgrid和MSFlexGrid却没有提供相应的功能,FlexGrid甚至连直接编辑网格的能力都没有提供。经过笔者的探索,在VC++下通过标准控件和ActiveX控件相聚合的技术成功地为FlexGrid控件增加了编辑和PickList的能力,使之成为真正功能强大的网格控件。
方案设计
由于FlexGrid控件不允许对网格单元进行编辑,因此如果要在其上实现PickList功能就首先要有一组合框来与其配合共同实现该功能:在鼠标或光标(即当前焦点)移到FlexGrid的某个网格时,通过事件响应来激发组合框的显示,并且要求组合框在位置、大小等方面与FlexGrid的当前网格完全重合。显示的组合框的当前值为其所在网格原先的取值,在用户通过鼠标完成对内容的选择后再将用户的选择结果输送回网格。而一旦该网格不再需要编辑(即失去焦点)时组合框应当隐藏。从整个设计过程来看,FlexGrid并不是直接同用户进行交互的,而是通过组合框的中介来完成的。FlexGrid只负责数据的显示和组织,PickList功能是由动态显示的组合框来完成。用户丝毫不会意识到两个控件的存在,唯一的感觉只会是FlexGrid控件增添了PickList功能。
控件聚合的过程中有两个地方是比较关键的,也是程序实现的重点:一个是当鼠标点击网格单元时,能通过事件的触发在网格上覆盖一个与其等大的组合框,并完成网格数据向组合框的传送;另一点是当用户完成对组合框内容的选择后能将组合框从当前位置隐藏,并将用户选择的结果返回与其对应的网格单元。
编码实现
在进行程序编码之前首先要通过添加组件和控件的方式向程序中添加FlexGrid控件,Visual Studio 提供有此控件--Microsoft FlexGrid Control, version 6.0。由于在程序中需要准确地将组合框同网格控件的单元格相聚合,因此手工拖动FlexGrid到对话框是无法同组合框准确定位的,因此需要通过SetWindowPos()函数在像素级上动态设定网格控件在对话框中的具体位置:
//获取客户区矩形
CRect rcBounds;
GetClientRect(&rcBounds);
//设定FlexGrid控件在对话框中的位置和大小
m_ctlMSFlexGrid.SetWindowPos(&wndTop,rcBounds.left,rcBounds.top,rcBounds.Width(),
rcBounds.Height(),NULL);
用来接受用户输入的组合框控件在程序运行之初,如果用户进行输入操作,是不显示的,只有在用户发出鼠标单击的消息需要进行编辑时才将其显示,因此需要将组合框控件的初始属性设为不可见。通过前面的方案设计可以看出,整个操作的全过程无非是对鼠标和焦点的消息响应和处理。通过FlexGrid控件响应鼠标单击的事件可以得知用户是否进行编辑操作,并在捕获到该操作后,通过对消息的响应完成用户输入信息从组合框到网格单元的复制:
//对FlexGrid控件的单击响应
BEGIN_EVENTSINK_MAP(CFlexGridDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CFlexGridDlg)
ON_EVENT(CFlexGridDlg, IDC_MSFLEXGRID, -600 /* Click */, OnClickMsflexgrid, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
……
//鼠标单击消息的响应处理
//计算被选中的单元格的坐标,以便组合框能恰好与之吻合
long lRow = m_ctlMSFlexGrid.GetRowSel();
long lCol = m_ctlMSFlexGrid.GetColSel();
……
// MSFlexGrid 控件的函数的长度单位是"缇(twips)",
//需要将其转化为像素,1440 缇 = 1 英寸
int nTwipsPerDotX = 1440 / pDC->GetDeviceCaps(LOGPIXELSX) ;
int nTwipsPerDotY = 1440 / pDC->GetDeviceCaps(LOGPIXELSY) ;
……
//将缇转换为像素
long lCellWidth = m_ctlMSFlexGrid.GetCellWidth()/ nTwipsPerDotX;
long lCellHeight = m_ctlMSFlexGrid.GetCellHeight()/ nTwipsPerDotY;
long lCellLeft = m_ctlMSFlexGrid.GetCellLeft() / nTwipsPerDotX;
long lCellTop = m_ctlMSFlexGrid.GetCellTop() / nTwipsPerDotY;
在完成对网格单元的坐标计算及转换后,需要动态调整组合框的坐标位置及大小,使其能与当前网格单元相配,同时把焦点由当前的网格单元转移到组合框上,从而实现两控件的聚合:
//设置组合框坐标
m_ctlPickList.SetWindowPos(&wndTop,lCellLeft,lCellTop,lCellWidth,lCellHeight,NULL);
//将焦点转移到组合框
m_ctlPickList.SetFocus();
//将改动完毕的组合框变为可视
m_ctlPickList.ShowWindow(SW_SHOW);
如果此时的网格原先已有内容,此时亦应当将内容转移到组合框中,在用户修改后再作回存处理:
CString sData = m_ctlMSFlexGrid.GetText(); //获取原先的内容
if(sData=="紧急") //网格内容为"紧急"
m_ctlPickList.SetCurSel(0); //设置组合框显示第一项内容"紧急"
else if(sData=="一般") //网格内容为"一般"
m_ctlPickList.SetCurSel(1); //设置组合框显示第二项内容"一般"
else //网格内容为"暂缓"
m_ctlPickList.SetCurSel(2); //设置组合框显示第三项内容"暂缓"
此时只能接收用户的输入,当对下一单元进行编辑时输入过的数据并没有保存到网格中,因此在组合框控件失去焦点时应完成当把当前用户修改过的内容回存到单元格的处理。具体来说,是对组合框ON_KILLFOCUS消息的响应:
int i=m_ctlPickList.GetCurSel(); //根据组合框的当前选项决定回存的内容
if(i==0)
sInputData="紧急";
if(i==1)
sInputData="一般";
if(i==2)
sInputData="暂缓";
……
m_ctlMSFlexGrid.SetText(sInputData);//将用户的选择写入网格控件
m_ctlPickList.ShowWindow(SW_HIDE); //隐藏组合框
通过以上几步编码基本上实现了对FlexGrid控件和组合框控件的聚合,并通过这种聚合技术成功地为FlexGrid控件增添了PickList功能,不仅方便了用户的使用,也使人机界面更为友好。下图就是一个使用了本文所述控件聚合技术实现的具有PickList能力的程序界面,从界面上和使用效果看根本感觉不出是两种各自相互独立组件的作用结果,同Delphi提供的DBGrid控件在效果上很相似:
cxjlw
2003-05-30
打赏
举报
回复
VC自带的控件FlexGrid,试试看。网上有例子,搜索一下。
其实用CListCtrl肯定可以实现。到http://www.codeguru.com/listview/index.shtml去看看。
至于这些按钮,就要编程去实现,应该不难。
Spread for WinForms 电子
表格
控件
基础视频教程
Spread for WinForms 电子
表格
控件
基础视频教程
VC
控件
CEdit重新审视
一个
从没想过的问题今天终于出现了!我自己都感到以外!呵呵,什么问题呢?可能你也没想过哦。即使想过,你解答了没有? 是
一个
聊天的程序,
类似
于QQ的界面。简化一点说把。(注意是简化)
一个
基于对话框的的程序,只有2个编辑框m_edit1,m_edit2, 还有
一个
是按钮。现在我要做的就是在 m_edit2中
输入
,然后点击按钮,内容就跑到了m_edit1中。并且每次点击后...
有哪些值得
推荐
的
数据
可视化工具?
作者:文兄 链接:https://www.zhihu.com/question/19929609/answer/133825589 来源:知乎 著作权归作者所有。商业转载
请
联系作者获得授权,非商业转载
请
注明出处。 谢邀。本答案提要:1.plotly 2.R ggplot23.无需编程语言的工具(7个)4.基于JavaScript
实现
的工具(8个)5.基于其他语言的工具(5个)6.地图
数据
可视化工具(7个)7.金融(股票)
数据
可视化工具(2个)8.时间轴
数据
可视化工具(2个)9.函数与公式
数据
可视化工具(2个
Excel 电子
表格
运用技巧汇总
Excel电子
表格
运用技巧汇总 Leo @ 2005-4-2513:53 Excel XP的八则快速
输入
技巧 如果我们在用Excel XP处理庞大的
数据
信息时,不注意讲究技巧和
方法
的话,很可能会花费很大的精力。因此如何巧用Excel XP,来快速
输入
信息就成为各个Excel XP用户非常关心的话题,笔者向大家介绍几则这方面的小技巧。 1、快速
输入
大量含小数点的数字 如果我们需要在E...
wxWidgest wxGrid鼠标滑过事件捕获等问题
其实我不是来发表博文的,只是
求助
,学编程也才几个月。近期在做两个界面: 1、满足鼠标滑过
表格
wxGrid时,鼠标所在当前行选中设置为高亮,使得
表格
里的内容(内容较多时只能看到部分)可以显示全,但这里如何在
表格
上获得鼠标滑过事件我就不知道如何做到了,后面高亮显示对于我也是
一个
难题,当一行
表格
的多个单元格都有内容时,这个应该还是不能显示全; 2、将TextCtrl做成
类似
进度条的效果,可以正常
输入
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章