火山 MFC 表格怎么在输入时限制输入长度
本帖最后由 asd0023 于 2026-4-19 13:53 编辑火山 MFC 表格怎么在输入时限制输入长度?
<火山程序 类型 = "通常" 版本 = 1 />
方法 置单元格输入长度 <公开 类型 = 逻辑型 注释 = "限制单元格的最大可输入字符长度,只对文本型单元格有效." 返回值注释 = "成功返回真,失败返回假." @禁止流程检查 = 真>
参数 列号 <类型 = 整数 注释 = "指定需要限制输入长度的列号,从0开始.">
参数 最大长度 <类型 = 整数 注释 = "指定单元格最大可输入的字符数量,正整数.">
{
@ CVWnd_Grid* pWnd = (CVWnd_Grid*)GetMfcWndPtrWithValidHWnd ();
@ if (pWnd != NULL && pWnd->SetMaxTextLength (@<列号>, @<最大长度>))
@ {
@ pWnd->Refresh ();
@ return TRUE;
@ }
@ return FALSE;
}
错误: 使用所指定的本地编译器编译当前程序失败错误: vpkg_全局.cpp<H:\voldev25\plugins\vprj_win\classlib\sys\mfc_ui_grid\w_mfc_ui_grid.v>, 595: 错误: error C2039: "SetMaxTextLength": 不是 "CVWnd_Grid" 的成员 H:\voldev25\plugins\vprj_win\classlib\sys\\mfc_ui_grid\\src\\mfc_ui_grid.h(26): note: 参见“CVWnd_Grid”的声明 vpkg_外部组件操作库_.cpp vpkg_程序综合库_.cpp vpkg_进程权限库_.cpp
编译生成目标文件"x'x'x'x'x'x'x"失败,耗费时间 1188 毫秒.
--- 项目"x'x'x"编译或链接失败. 编译过程中共遇到了 1 个警告, 3 个错误.
就没有这个方法肯定报错啊。 创世魂 发表于 2026-4-19 14:07
就没有这个方法肯定报错啊。
那要怎么写火山MFC 表格在输入时限制输入长度.
谢谢 asd0023 发表于 2026-4-19 14:44
那要怎么写火山MFC 表格在输入时限制输入长度.
谢谢
消息判断-键盘-拦截 朕的 发表于 2026-4-19 14:51
消息判断-键盘-拦截
最好在表格控件里写这条
方法 置单元格输入长度 <公开 类型 = 逻辑型 注释 = "限制单元格的最大可输入字符长度,只对文本型单元格有效." 返回值注释 = "成功返回真,失败返回假." @禁止流程检查 = 真>
参数 列号 <类型 = 整数 注释 = "指定需要限制输入长度的列号,从0开始.">
参数 最大长度 <类型 = 整数 注释 = "指定单元格最大可输入的字符数量,正整数.">
直接调用
表格1. 置单元格输入长度(1,6)//限制表格单元在编辑时只能输入最大6个字符
asd0023 发表于 2026-4-19 15:06
最好在表格控件里写这条
方法 置单元格输入长度
参数 列号
表格有这个命令吗? 本帖最后由 asd0023 于 2026-9-20 11:50 编辑
在w_mfc_ui_grid.v里创建一个方法名
<火山程序 类型 = "通常" 版本 = 1 />
方法 置编辑状态最大字符数 <公开 类型 = 逻辑型 注释 = "限制编辑状态下允许最大字符数" @禁止流程检查 = 真>
参数 列号 <类型 = 整数 注释 = "要限制的列号,(-1 表示不按列判断),>=0使用 参数2">
参数 最大字符数 <类型 = 整数 注释 = "编辑状态下允许最大字符数" @默认值 = 0>
{
变量 实际限制 <类型 = 整数>
如果 (列号 == 取光标列号 () && 列号 > -1)
{
实际限制 = 最大字符数
}
否则
{
实际限制 = 0
}
@ BOOL bRet = FALSE;
@ CVWnd_Grid* pGrid = (CVWnd_Grid*)GetMfcWndPtr();
@ if (pGrid != NULL)
@ {
@ HWND hGrid = pGrid->GetSafeHwnd();
@ HWND hEdit = NULL;
@ if (hGrid != NULL)
@ {
@ // 第一步:在 grid 直接子窗口里找类名为 "Edit" 的
@ hEdit = ::FindWindowEx(hGrid, NULL, _T("Edit"), NULL);
@ // 第二步:没找到就枚举所有后代(最多两层就够,grid 的编辑框不会埋得太深)
@ if (hEdit == NULL)
@ {
@ HWND hChild = ::GetWindow(hGrid, GW_CHILD);
@ while (hChild != NULL && hEdit == NULL)
@ {
@ hEdit = ::FindWindowEx(hChild, NULL, _T("Edit"), NULL);
@ if (hEdit == NULL)
@ {
@ HWND hGrand = ::GetWindow(hChild, GW_CHILD);
@ while (hGrand != NULL && hEdit == NULL)
@ {
@ hEdit = ::FindWindowEx(hGrand, NULL, _T("Edit"), NULL);
@ hGrand = ::GetWindow(hGrand, GW_HWNDNEXT);
@ }
@ }
@ hChild = ::GetWindow(hChild, GW_HWNDNEXT);
@ }
@ }
@ if (hEdit != NULL)
@ {
@ ::SendMessage(hEdit, EM_SETLIMITTEXT, (WPARAM)@<实际限制>, 0);
@ bRet = TRUE;
@ }
@ }
@ }
@ return bRet;
返回 (假)
}
<火山程序 类型 = "通常" 版本 = 1 />
方法 表格_字符输入 <接收事件 类型 = 整数 注释 = "当用户输入一个字符后发生此事件,字符键包括任何可打印的键盘字符及回车(Enter)" 注释 = "和退格(BackSpace)键."
返回值注释 = "本事件的处理方法返回值如果小于0,表明事件已经得到处理且不再需要后续处理,如果" 返回值注释 = "大于0,则将该值作为新的替代字符代码继续进行后续处理.如果等于0,则使用原字符值继"
返回值注释 = "续进行后续处理.">
参数 来源对象 <类型 = 表格 注释 = "提供事件产生的具体来源对象">
参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
参数 字符代码 <类型 = 字符 注释 = "提供所输入的字符">
{
来源对象.置编辑状态最大字符数 (2, 7)
返回 (0)
}
页:
[1]