MFC C++VS 2010:编辑框只接受字母、退格和空格

MFC C++ VS 2010 : Edit Box to accept only alphabets, backspace and spaces

本文关键字:空格 2010 C++VS 编辑 MFC      更新时间:2023-10-16

正如标题中提到的,我目前正在为我的项目使用VS 2010 C++,MFC应用程序。目前是编程新手。

我目前被要求创建一个编辑框来接受姓名,全名,例如"Lee Roy Long"。我浏览了许多其他网站,但我不知道该用哪种方法来做

有什么例子或指南可以说明如何做到这一点吗?

编辑:除了这个已经解决的问题之外,我还有另一个问题[由于"限制",无法发布新问题],我目前正在使用相同的编辑框将新名称作为字符串添加到SQLite数据库中。我目前在将CString转换为string 时遇到一些问题

vector<int> userSerialNumber;
vector<string> userName;
vector<int> userID;
vector<int> userTrainingImagesNo;

程序从这里开始:

     CString str,text;
     CString Lone = _T("MEEP"); // This one converts it succesffuly...
     string ss((CStringA(Lone)));/Only works for declared CStrings? 
     CEdit* editBox = (CEdit*)GetDlgItem(IDC_EDIT1);
     editBox->GetWindowText(str);

将用户从上面输入的内容添加到下面的程序中。

            userSerialNumber.push_back(newserialnumber);
        userID.push_back(newserialnumber);
        userName.push_back(ss);
        userTrainingImagesNo.push_back(Img);

我参考了许多关于如何将CString转换为字符串的网站,但都没有成功,包括这一个。

当我调试程序时,CString和string之间的转换不起作用,因为我得到了字符串的",这导致数据库更新了一个空白的"。

CString str="name"//Name从EditBox获取的字符串std::string newname="//在键入许多转换方法后,结果"

关于这件事,有什么我没有注意到的吗?

您可以通过从CEdit派生一个类并在派生类中处理WM_CHAR消息来过滤进入编辑控件的击键。要接受密钥,请将其传递给CEdit::OnChar;要拒绝密钥,只需返回而不调用CEdit函数。

若要将编辑控件连接到代码,请使用标准MFC子类化技术。右键单击控件并在父窗口中创建控件成员变量(CEdit)。然后进行编辑,将变量从CEdit更改为CYourDerivedCEdit。

上有一个关于这方面的教程和一个示例项目http://www.flounder.com/validating_edit_control.htm

作为捕获每个字符的替代方法,您可以处理编辑框的CWnd::OnKillFocus事件,并查询值一次。验证可以通过使用CString::SpanExclude和数字以及结果字符串中应为而非的任何其他字符来完成。例如,

CString stringEnteredByUser = _T("Lee Roy Long");
CString validatedString = stringEnteredByUser.SpanExcluding("0123456789");
if (stringEnteredByUser != validatedString)
   AfxMessageBox(_T("Invalid string"), MB_OK);

"stringEnteredByUser"变量应包含用户输入的字符串。在本例中,使用SpanExclude会告诉您他们是否输入了数字。如果用户输入了无效字符(即该字符在提供给SpanExluding调用的列表中),则调用返回的字符串(validatedString)将与用户键入的字符串(stringEnteredByUser)不匹配。

如果验证失败,只需将焦点强制返回到编辑框即可。

我假设您知道一些基本的事件编码。

使用Textbox.textchanged事件。还研究了ASCII及其转换(asc函数)如果你需要更多帮助,请在下面评论。祝你好运