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

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

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

我目前被要求创建一个编辑框来接受姓名、全名,例如 "Lee Roy Long"。我浏览了许多其他网站,但我对应该使用哪种方法感到困惑。

是否有关于如何进行此操作的任何示例或指南?

编辑:除了这个已解决的问题之外,我还有另一个问题[由于"restrictions"],无法Post新问题],我目前正在使用相同的编辑框将新名称作为字符串添加到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 转换为字符串的网站,但其中 none 个有效,包括这个。

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

CString str = "name";//从EditBox获取的CString名称 std::string 新名字 = ""; //输入很多转换方法后,结果为""

有什么我没有注意到的吗?

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

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

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

要将编辑控件连接到您的代码,您可以使用标准的 MFC 子classing 技术。右击控件,在父window中创建一个控件成员变量(一个CEdit)。然后编辑以将变量从 CEdit 更改为 CYourDerivedCEdit。

http://www.flounder.com/validating_edit_control.htm

上有关于此的教程和示例项目

作为捕获每个字符的替代方法,您可以使用数字和任何其他应该 而不是 出现在结果字符串中的字符来处理 CWnd::OnKillFocus event for the edit box and interrogate the value once. Validating can be done by using CString::SpanExcluding。例如,

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

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

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