在Edit Box 按回车键 执行在列表框里(List Box) 查询与Edit Box 里相同的内容

本文介绍了三种在编辑框中实现回车键响应的方法:1. 重载PreTranslateMessage函数来判断回车键;2. 子类化EDIT控件以自动跳转到下一个控件;3. 设置缺省按钮并响应事件。

http://bbs.bccn.net/thread-57747-1-1.html

网上的方法很多  对于下面这种方法 Find("\r\n"))  这里无法找到回车符;所以不能实现回车相应功能;

假设你的edit box 叫 IDC_EDIT1,对应的变量叫m_strAll。把edit box的属性里选multi-line和want return。给你的edit box 加ON_EN_UPDATE的信息:
void CForm1View::OnUpdateEdit1()
{
int intPos;
UpdateData();
while ((intPos = m_strAll.Find("\r\n")) >= 0)
{
  m_strAll = m_strAll.Left(intPos) + m_strAll.Right(m_strAll.GetLength() - intPos - 2);
  UpdateData(FALSE);
  GetNextDlgTabItem(GetFocus())->SetFocus();
}
}

正确的实现方法有以下三种:

参考:http://blog.csdn.net/xlm289348/article/details/8127058 

1.重载PreTranslateMessage(MSG* pMsg)函数,然后判断按下回车键时,焦点是不是在EDIT控件上。

BOOL CXXDlg::PreTranslateMessage(MSG* pMsg) {    if(WM_KEYDOWN == pMsg->message)    {        CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);        ASSERT(pEdit);        if(pMsg->hwnd == pEdit->GetSafeHwnd() && VK_RETURN == pMsg->wParam)        {            AfxMessageBox(_T("OK"));            return TRUE;        }    }    return CDialog::PreTranslateMessage(pMsg);}

2.子类化EDIT控件

下面是我子类化的一部分,处理EDIT回车,自动到一下个ID中,一般我会设为EDIT,这样就实现了输入时回车是自动跳到下一个EDIT控件的功能。
供 参考
void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (nChar==VK_RETURN)
{
CDialog *pWnd=(CDialog *)GetParent();
pWnd->NextDlgCtrl ();
}
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}

3.最简单的方法是设置缺省按钮,并在按钮中相应事件。 但此方法只适用于只有一个Edit相应回车键事件;

个人认为方法2 子类化EDIT 控件较容易实现;

实现过程参考http://blog.csdn.net/xlm289348/article/details/8126759  给控件添加窗口的响应函数(子类化EDIT控件   )以Edit控件为例

实现案例我在CSDN 资源上有上传案例;链接:http://download.csdn.net/download/xlm289348/4703043

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值