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

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

 

 

 

你可能感兴趣的:([置顶] 在Edit Box 按回车键 执行在列表框里(List Box) 查询与Edit Box 里相同的内容)