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。
上有关于此的教程和示例项目
作为捕获每个字符的替代方法,您可以使用数字和任何其他应该 而不是 出现在结果字符串中的字符来处理 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 调用的列表中)。
如果验证失败,只需将焦点强制返回到编辑框即可。
如标题所述,我目前正在为我的项目使用 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。
上有关于此的教程和示例项目作为捕获每个字符的替代方法,您可以使用数字和任何其他应该 而不是 出现在结果字符串中的字符来处理 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 调用的列表中)。
如果验证失败,只需将焦点强制返回到编辑框即可。