分享
 
 
 

做一个可编辑的表格控件

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

【实现内容】做一个可编辑的表格控件。

【使用控件】一个MSFLEXGRID表格控件,一个文本控件,一个下拉列表控件。

【实现原理】我喜欢把这个方法称为视觉假象。由于MSFLEXGRID控件本身是不支持直接编辑的。所以需要结合文本控件或者下拉列表控件,使表格控件的运行效果如同可以直接编辑一样。

【实现步骤】

1. 当鼠标点击表格控件的某一格时,首先判断该列的属性,是直接编辑呢,还是用下拉列表进行选择。

2. 显示隐藏的文本控件或者下拉列表控件,显示的位置和大小与选中格的位置大小完全相同,这样可以覆盖选中格

3. 将选中格的内容填到文本控件或者下拉列表控件中

4. 修改完毕后,将新的内容填到选中格中,同时隐藏文本控件或者下拉列表控件。

【主要程序段及说明】

变量定义:

CComboBox m_ChangeCombo;--下拉列表控件,初始时不可见

CEdit m_Change;---------------文本控件,初始时不可见

CSring m_sChange;----------------与文本控件关联的字符串

CMSFlexGrid m_FlexGrid;-----表格控件

程序段:

表格点击事件:选中某一格后,就要显示相应的文本控件或者列表控件

void CChartInfoEditDlg::OnClickMsflexgrid()

{

//点击无效区,返回

long lRow = m_FlexGrid.GetRowSel();//获取点击的行号

long lCol = m_FlexGrid.GetColSel(); //获取点击的列号

if(lRow>m_SAttrInfo.attrNum) //如果点击区超过最大行号,则点击是无效的

return;

if(lRow == 0) //如果点击标题行,也无效

return;

//

CRect rect;

m_FlexGrid.GetWindowRect(rect); //获取表格控件的窗口矩形

ScreenToClient(rect); //转换为客户区矩形

// MSFlexGrid 控件的函数的长度单位是"缇(twips)",

//需要将其转化为像素,1440 缇 = 1 英寸

CDC* pDC =GetDC();

//计算象素点和缇的转换比例

int nTwipsPerDotX = 1440 / pDC->GetDeviceCaps(LOGPIXELSX) ;

int nTwipsPerDotY = 1440 / pDC->GetDeviceCaps(LOGPIXELSY) ;

//计算选中格的左上角的坐标(象素为单位)

long y = m_FlexGrid.GetRowPos(lRow)/nTwipsPerDotY;

long x = m_FlexGrid.GetColPos(lCol)/nTwipsPerDotX;

//计算选中格的尺寸(象素为单位)。加1是实际调试中,发现加1后效果更好

long width = m_FlexGrid.GetColWidth(lCol)/nTwipsPerDotX+1;

long height = m_FlexGrid.GetRowHeight(lRow)/nTwipsPerDotY+1;

//形成选中个所在的矩形区域

CRect rc(x,y,x+width,y+height);

//转换成相对对话框的坐标

rc.OffsetRect(rect.left+1,rect.top+1);

//清空下拉列表的内容

m_ChangeCombo.ResetContent( );

//以下省略哪一列用文本控件,哪一列用下拉列表控件的判断。如果是用下拉列表控件,则会先向下拉列表控件中增加数据,否则为空

……………………………….

……………………………….

//获取选中格的文本信息

CString strValue = m_FlexGrid.GetTextMatrix(lRow,lCol);

int num = m_ChangeCombo.GetCount();

//如果下拉列表控件中有数据,则表示使用下拉列表控件来进行数据选择

if(num!=0)

{

m_ChangeCombo.ShowWindow(SW_SHOW);//显示控件

m_ChangeCombo.MoveWindow(rc); //移动到选中格的位置,覆盖

m_ChangeCombo.SelectString(-1,strValue); //内容全选。方便直接修改

m_ChangeCombo.SetFocus(); //获取焦点

UpdateData(false);

return;

}

//

m_Change.ShowWindow(SW_SHOW); //显示控件

m_Change.SetWindowText(strValue); //显示文本

m_Change.SetFocus(); //获取焦点

m_Change.SetSel(0,-1); //全选

m_Change.MoveWindow(rc); //移动到选中格的位置,覆盖

}

文本编辑完毕后,回车即将新的文本信息填到选中格中

void CChartInfoEditDlg::OnKillfocusEditChange()

{

UpdateData(true);

m_FlexGrid.SetText(m_SChange);//设置文本信息

m_Change.ShowWindow(SW_HIDE); //隐藏文本控件

UpdateData(false);

}

下拉列表编辑完毕后,将新的新息填到选中格中

void CChartInfoEditDlg::OnKillfocusChangecombo()

{

UpdateData(true);

CString str;

m_ChangeCombo.GetWindowText(str);

m_FlexGrid.SetText(str);

m_ChangeCombo.ShowWindow(SW_HIDE);

UpdateData(false);

}

【总结】这是一个比较简单的程序。如果表格中列较多,属性各有不同,也许大家可以试着用更加复杂的控件来编辑信息。也可以同时做多个文本控件和下拉列表控件,以对应不同列的不同信息要求(比如有的格信息可能又不同的格式要求,那么可以预先做好各种不同风格的控件与之对应)。

【笔者注】虽然当前有许多这样的例子。但笔者做这个程序时,并没有借鉴现有的东西。因此可能在方法上不见得最简单。但确实效果不错,对付一般情况是没有问题的。大家如果对此有疑问或新思想,可以和笔者讨论。联系信箱:happyparrot@126.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有