1.создать ивент текстбох1_ченджет и тоже самое для тектбох2 отлавливать что введено в их. если оба тектбокса не равняются "" то баттнонх. енейбл=тру=) 2. Тупой, но для тебя по легче=) проверять в таймере изменения в текстбоксах
Простая логика: 1 Ставишь по умолчанию Button1.Enabled = false; 2 Отлавливаешь событие ввода в текстбокс и сравниваешь с пустой строкой String.Empty - пустая строка Button1.Enabled = false; - не пустая строка Button1.Enabled = true;
Логика логикой, отладка отладкой. =) Ты поставь точку останова на строку PHP: if ((textBox1->Text->Length == 0) || (textBox2->Text->Length == 0)) и посмотри чему у тебя длинна ровна. И вообще срабатывает ли событие. Все станет ясно как день.
Читал я твой код, хоть и не удобно (вот кстати про неудобство, зайди в тему поддержи предложение по поводу тегов, может администрация внимание обратит наконец) Я не имел ввиду символ точка, я говорю про точку останова - бряк - в викепедии вот - Нужно же посмотреть выполняется код этот или нет. Теперь понял? Ты в VS 2010 пишешь или где?
Code: \ private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) { label3->Text = ""; // очистить поле отображения if ((textBox1->Text->Length != 0) && (textBox2->Text->Length != 0)) button1->Enabled = true; else button1->Enabled = false; } private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) { label3->Text = ""; // очистить поле отображения if ((textBox1->Text->Length != 0) && (textBox2->Text->Length != 0)) button1->Enabled = true; else button1->Enabled = false; } как то так. не проверял
Можно по подробней почему 2 события? я ведь в одном указываю для 2 полей(textbox1 и textbox2). Или есть какие то особенности? у тебя 2 раза одна и та же функция. Поставил во втором случае TextChanged1. Но ничего не поменялось. Кнопка активна.
Я бы описал явным образом: if ((textBox1->Text->Length > 0) && (textBox2->Text->Length > 0)) button1->Enabled = true; else button1->Enabled = false; К тому же, если в обработчике клацнуть enter, то поле визуально будет пустым, хотя символ там будет. Я бы обрабатывал не изменение ячейки, а выход из нее.
ТС дело не в логике и исполнении. Твой код рабочий. Вот смотри. Накидал, потому что себе уже не верю) проверять стал. язык правда С# ну да ладно, события то те же: PHP: private void textBox1_TextChanged(object sender, EventArgs e) { if (textBox1.Text.Length == 0) { button1.Enabled = false; } else button1.Enabled = true; } Все работает идеально. Так что либо скидывай свой проект сюда для анализа под микроскопом либо ищи сам. Дело не в логике, в самом проекте что то не так.
Т.к. боксов 2, то лучше при нажатии на кнопку проверять наличие такста а не дёргать функцию при каждом изменении символа.
Вот немного добавил: 1) при загрузке кнопка не активная (событие Load). 2 и 3) событие на изменение текста в текстбоксе. если не пустые строки в обоих текстбоксах, то кнопка активна иначе неактивна. 4) добавил событие KeyPress (textBox2_KeyPress) на второй тексбокс. почему-то на первом было, а на втором было сделано, но не добавлено. Вот изменения: private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { button1->Enabled = false; } private: System::Void textBox1_TextChanged_1(System::Object^ sender, System::EventArgs^ e) { if ((textBox1->Text->Length > 0) && (textBox2->Text->Length>0) ) button1->Enabled = true; else button1->Enabled = false; } private: System::Void textBox2_TextChanged(System::Object^ sender, System::EventArgs^ e) { if ((textBox1->Text->Length > 0) && (textBox2->Text->Length>0) ) button1->Enabled = true; else button1->Enabled = false; } Вот переделанный проект: ссылка на rghost.ru мой файл в папке релиз
А подскажи где ты взял такую функцию? Из книги, форума или сам придумал? private: System::Void textBox1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { if ((e->KeyChar >= '0') && (e->KeyChar<= '9')) //цыфра return; //Правильный десятичный разделтель - запятая. // Заменим точку на запятую if (e->KeyChar == '.') e->KeyChar = ','; if (e->KeyChar==',') { //Нажата запятая. //Проверим, может быть, запятая уже есть в поле редактирования if ((textBox1->Text->IndexOf(',') != -1) || (textBox1->Text->Length == 0)) { //Запятая уже есть. //Запретить ввод ещё одной e->Handled = true; }