vc++请问edit控件问题

归途醉染 2018-01-10 10:11:10
有多个edit控件 如何像微软做的一样 一个edit输入5个字符,自动到下一个edit控件中然后在输入5个字符 然后又自动到下一个edit控件中去 请指点
...全文
587 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2018-01-12
  • 打赏
  • 举报
回复
引用 9 楼 qq_36088602 的回复:
[quote=引用 7 楼 jianwen0529 的回复:] [quote=引用 6 楼 thecentry 的回复:] demo就是判断当前edit内容长度是否为5,如果是把光标设置在下一个edit窗口上 ?
((CEdit *)GetDlgItem(IDC_EDIT2))->SetFocus(); 1L代码已经给出[/quote] 那我有4个控件不是要获得4个edit的句柄和内容?四个Cstring?[/quote] 你编辑界面的时候不久有个控件ID,利用它们,或者关联控件变量
CT8100 2018-01-12
  • 打赏
  • 举报
回复
引用 12 楼 qq_36088602 的回复:
[quote=引用 10 楼 iloveyou418 的回复:] 那我就说一个与众不同的方法吧,当每个edit控件存在4个字符,然后往光标处发送“回车”。。
这个可以 来个实例吧 谢谢[/quote] if(控件中有5哥字符) keybd_event(13,0,0,0);
归途醉染 2018-01-12
  • 打赏
  • 举报
回复
引用 14 楼 jianwen0529 的回复:
[quote=引用 13 楼 qq_36088602 的回复:] 为什么定时器没反应
你是在类向导里面生成的OnTimer函数吗? 如果是,这里看不出有什么问题 如果不是,你检查下是否在消息映射中设置了消息响应[/quote] 谢谢
幻夢之葉 2018-01-12
  • 打赏
  • 举报
回复
引用 13 楼 qq_36088602 的回复:
为什么定时器没反应
你是在类向导里面生成的OnTimer函数吗? 如果是,这里看不出有什么问题 如果不是,你检查下是否在消息映射中设置了消息响应
归途醉染 2018-01-12
  • 打赏
  • 举报
回复
引用 11 楼 jianwen0529 的回复:
[quote=引用 9 楼 qq_36088602 的回复:] [quote=引用 7 楼 jianwen0529 的回复:] [quote=引用 6 楼 thecentry 的回复:] demo就是判断当前edit内容长度是否为5,如果是把光标设置在下一个edit窗口上 ?
((CEdit *)GetDlgItem(IDC_EDIT2))->SetFocus(); 1L代码已经给出[/quote] 那我有4个控件不是要获得4个edit的句柄和内容?四个Cstring?[/quote] 你编辑界面的时候不久有个控件ID,利用它们,或者关联控件变量[/quote] hey 大佬 问一个
BOOL CzklsregcodeDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	SetTimer(0,100,NULL);
	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	//SetBitmap(IDB_BITMAP3,IDC_STATIC_PIC);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
void CzklsregcodeDlg::OnTimer(UINT nIDEvent)
{
	// TODO: Add your message handler code here and/or call default 
	switch(nIDEvent)
	{
	case 0:
		MessageBox("Timer 0");
		break;
	case 1:
		//Log("Timer 1");
		break;
	case 2:
		//Log("Timer 2");
		break;
	}
	CDialog::OnTimer(nIDEvent);
}
为什么定时器没反应
归途醉染 2018-01-12
  • 打赏
  • 举报
回复
引用 10 楼 iloveyou418 的回复:
那我就说一个与众不同的方法吧,当每个edit控件存在4个字符,然后往光标处发送“回车”。。
这个可以 来个实例吧 谢谢
归途醉染 2018-01-12
  • 打赏
  • 举报
回复
在MFC已经完成 但是到win32中卡壳了
归途醉染 2018-01-12
  • 打赏
  • 举报
回复
引用 15 楼 qq_36088602 的回复:
[quote=引用 14 楼 jianwen0529 的回复:] [quote=引用 13 楼 qq_36088602 的回复:] 为什么定时器没反应
你是在类向导里面生成的OnTimer函数吗? 如果是,这里看不出有什么问题 如果不是,你检查下是否在消息映射中设置了消息响应[/quote] 谢谢[/quote] Hey, 在类中怎么使用定时器的回调函数..... win32中 获取控件的内容要获取edit控件句柄 故:不能使用static回调函数 应该怎么做... 我思路走一遍: 我是使用定时器来自动判断是否到五个字符 到了 我就把关标推送到下一个edit控件中
归途醉染 2018-01-12
  • 打赏
  • 举报
回复
引用 16 楼 iloveyou418 的回复:
[quote=引用 12 楼 qq_36088602 的回复:] [quote=引用 10 楼 iloveyou418 的回复:] 那我就说一个与众不同的方法吧,当每个edit控件存在4个字符,然后往光标处发送“回车”。。
这个可以 来个实例吧 谢谢[/quote] if(控件中有5哥字符) keybd_event(13,0,0,0);[/quote] Hey, 在类中怎么使用定时器的回调函数..... win32中 获取控件的内容要获取edit控件句柄 故:不能使用static回调函数 应该怎么做... 我思路走一遍: 我是使用定时器来自动判断是否到五个字符 到了 我就把关标推送到下一个edit控件中
CT8100 2018-01-11
  • 打赏
  • 举报
回复
那我就说一个与众不同的方法吧,当每个edit控件存在4个字符,然后往光标处发送“回车”。。
归途醉染 2018-01-11
  • 打赏
  • 举报
回复
引用 5 楼 ysu_yujie 的回复:
[quote=引用 3 楼 qq_36088602 的回复:] [quote=引用 2 楼 ysu_yujie 的回复:] 在Edit控件的消息处理函数中,添加如下代码即可。EDIT1为当前控件ID,EDIT2为下一个控件ID CString str; GetDlgItem(IDC_EDIT1)->GetWindowText(str); if (str.GetLength() == 5) { ((CEdit *)GetDlgItem(IDC_EDIT2))->SetFocus(); }
可以给一个win32版本的demo吗 谢谢[/quote] 就以你上面给出的那个界面为例,在对话框设计的界面,双击EDIT控件,会自动添加消息处理函数,在这个函数里面添加我给你的代码就可以了[/quote] 在MFC中SetTimer 时间单位是秒还是和win32中的时间单位一样(毫秒)?
归途醉染 2018-01-11
  • 打赏
  • 举报
回复
引用 7 楼 jianwen0529 的回复:
[quote=引用 6 楼 thecentry 的回复:] demo就是判断当前edit内容长度是否为5,如果是把光标设置在下一个edit窗口上 ?
((CEdit *)GetDlgItem(IDC_EDIT2))->SetFocus(); 1L代码已经给出[/quote] 那我有4个控件不是要获得4个edit的句柄和内容?四个Cstring?
幻夢之葉 2018-01-11
  • 打赏
  • 举报
回复
引用 6 楼 thecentry 的回复:
demo就是判断当前edit内容长度是否为5,如果是把光标设置在下一个edit窗口上 ?
((CEdit *)GetDlgItem(IDC_EDIT2))->SetFocus(); 1L代码已经给出
paschen 版主 2018-01-10
  • 打赏
  • 举报
回复
响应文本改变事件,处理函数中判断字符数如果为5,将焦点设置到下一个文本框
归途醉染 2018-01-10
  • 打赏
  • 举报
回复
引用 2 楼 ysu_yujie 的回复:
在Edit控件的消息处理函数中,添加如下代码即可。EDIT1为当前控件ID,EDIT2为下一个控件ID CString str; GetDlgItem(IDC_EDIT1)->GetWindowText(str); if (str.GetLength() == 5) { ((CEdit *)GetDlgItem(IDC_EDIT2))->SetFocus(); }
可以给一个win32版本的demo吗 谢谢
fly_with_the_winds 2018-01-10
  • 打赏
  • 举报
回复
在Edit控件的消息处理函数中,添加如下代码即可。EDIT1为当前控件ID,EDIT2为下一个控件ID CString str; GetDlgItem(IDC_EDIT1)->GetWindowText(str); if (str.GetLength() == 5) { ((CEdit *)GetDlgItem(IDC_EDIT2))->SetFocus(); }
归途醉染 2018-01-10
  • 打赏
  • 举报
回复
开源学开源 2018-01-10
  • 打赏
  • 举报
回复
demo就是判断当前edit内容长度是否为5,如果是把光标设置在下一个edit窗口上 ?
fly_with_the_winds 2018-01-10
  • 打赏
  • 举报
回复
引用 3 楼 qq_36088602 的回复:
[quote=引用 2 楼 ysu_yujie 的回复:] 在Edit控件的消息处理函数中,添加如下代码即可。EDIT1为当前控件ID,EDIT2为下一个控件ID CString str; GetDlgItem(IDC_EDIT1)->GetWindowText(str); if (str.GetLength() == 5) { ((CEdit *)GetDlgItem(IDC_EDIT2))->SetFocus(); }
可以给一个win32版本的demo吗 谢谢[/quote] 就以你上面给出的那个界面为例,在对话框设计的界面,双击EDIT控件,会自动添加消息处理函数,在这个函数里面添加我给你的代码就可以了

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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