Есть два 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;
}
→ Ссылка