Есть два EditControl, необходимо сделать, чтобы вводя текст в один, появлялся текст в другом
Сложность в том, что это зацикливается. Я могу сделать, чтобы при вводе в один Бокс, появлялся текст в другом. Но чтобы можно было вводить в оба, не получается. Они зацикливаются. (Изменяешь, к примеру, второй - он изменяет первый, в первом срабатывает OnEnChangeEdit - выполняется код по изменению второго, и во втором опять происходит изменение, которое снова вызывает изменение в первом. Бесконечный цикл - ошибка. Не знаю, как сделать реализацию того, чтобы можно было без проблем вводить текст в оба текстбокса.
void CMFCApplication3Dlg::OnEnChangeEdit2()
CString t_box1;
GetDlgItemText(IDC_EDIT2, t_box1); // забираем текст из первого бокса
CT2CA pszConvertedAnsiString(t_box1); // Convert a TCHAR string to a LPCSTR
std::string strStd(pszConvertedAnsiString); // construct a std::string using the LPCSTR input
std::vector<std::string> vec = split(strStd);
std::string newstr = makeNewStr(vec);
CString cs(newstr.c_str());
SetDlgItemText(IDC_EDIT3, cs); // ставим текст во второй бокс
void CMFCApplication3Dlg::OnEnChangeEdit3()
{
}
Ответы (1 шт):
Автор решения: Alex F
→ Ссылка
Пример с двумя CEdit, одинаковый текст в обоих окнах. changing это член класса CTestDlg, устанавливается в FALSE в конструкторе.
BOOL changing; // class member, set to FALSE in constructor
void CTestDlg::OnEnChangeEdit1()
{
if (changing)
{
return;
}
CString s;
GetDlgItemText(IDC_EDIT1, s);
changing = TRUE;
SetDlgItemText(IDC_EDIT2, s);
changing = FALSE;
}
void CTestDlg::OnEnChangeEdit2()
{
if (changing)
{
return;
}
CString s;
GetDlgItemText(IDC_EDIT2, s);
changing = TRUE;
SetDlgItemText(IDC_EDIT1, s);
changing = FALSE;
}
