Nie wiem dlaczego program działa nie tak jak wydaje mi się że powinien.
Na formularzu mam dwa elementy edit: edit1 i edit2.
Zawsze aktywny komponent chcę oznaczać kolorem żółtym.
Po uruchomieniu programu aktywny jest edit1. Klikam w edit2 i chcę żeby w edit1 w akcji onExit wykonało się sprawdzenie wartości w edit1.
Pokazuję messagebox-a z dwoma przyciskami Tak/Nie i komunikatem "wartość wydaje się błędna. czy chcesz ją poprawić?"
Jeśli użytkownik kliknie w Tak (czyli chce wartość poprawić) to zostaję na edit1 a edit2 (mimo kliknięci) zostaje w standardowym kolorze.
Jeśli użytkownik kliknie na Nie (czyli NIE chce poprawić wartości) to powinien przejść na edit2 i edit2 powinno zmienić kolor na żółty a edit1 na standardowy kolor.
Niestety po kliknięciu w edit2 i wyborze przycisku NIE, edit2 nie zmienia koloru mimo że jest aktywne bo jak zaczynam klikać coś na klawiaturze to piszę w edit2.
Mój kod wygląda tak.
void __fastcall TForml::EditlExit (TObject *Sender)
{
Editi->Color=OryginalColor;
String info = "Value in Edit1 seems to be wrong. Are You want to change it?";
int iQuestion = MessageBox (Handle, info.c_str(), L"Warning", MB_YESNO | MB_ICONWARNING | MB_DEFBUTTON1);
if (i Question == ID YES) {
Edit1->SetFocus():
}
else if (i question == ID_NO) {
Edit1->Color = OryginalColor;
}
}
void __fastcall TForml::Edit1Enter (Tobject *Sender)
{
OryginalColor = Edit1->Color;
Edit1->Color = clYellow;
}
void __fastcall TForml::Edit2Enter (Tobject *Sender)
{
OryginalColor = Edit2->Color;
Edit2->Color = clYellow;
}
void __fastcall TForml::Edit1Exit (Tobject *Sender)
{
Edit2->Color = OryginalColor;
}