Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Control.Validating Event / 6 сообщений из 6, страница 1 из 1
02.09.2004, 20:14
    #32678386
Astakhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Control.Validating Event
Бога душу мать - извините но это уже крик души.
Я задолбался с двойными а.то и тройными отработками таких свойсв как Validating и Enter...
Например....
Ставим один TextBox и какой либо ActiveX.
У TextBox в Validating ставим e.Cancel = true; (т.е. никуда не выходить).
И ставим точки останока или выкидываем мессаги у него же в таких свойствах как Enter, Leave и Validating.
Теперь запускаем, входим в TextBox и пытаемся из него выползти.
Везде 2-3 отработка.
ПОЧЕМУ !!!!
КАК БОРОТЬСЯ !!!
Если переход на обычный контрол, то как минимум отрабатывает Enter у TextBox. Зачем если было сказано, что никто никуда не идет?
Помогите кто может, иначе я разобью свой ящик и пристерлю Билла.
...
Рейтинг: 0 / 0
02.09.2004, 23:52
    #32678452
viper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Control.Validating Event
Не нужно нервничать...
Не пойму проблемы, опишите детальней...
Вас смущает что после Cancel = true возникает Enter?
Что значит "Везде 2-3 отработка"?
Вот такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
private void OnEnter(object sender, System.EventArgs e)
{
	MessageBox.Show("OnEnter");
}

private void OnLeave(object sender, System.EventArgs e)
{
	MessageBox.Show("OnLeave");
}

private void OnValidated(object sender, System.EventArgs e)
{
	MessageBox.Show("OnValidated");
}

private void OnValidating(object sender, System.ComponentModel.CancelEventArgs e)
{
	MessageBox.Show("OnValidating");
	e.Cancel = true;
}
У меня такой порядок:
OnEnter
Уходим...
OnLeave
OnValidating
OnEnter
Вернулись в TextBox
Объясните что не так...
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
03.09.2004, 11:54
    #32679017
Astakhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Control.Validating Event
авторНервничаю, потому как за 2 недели написал класс и уже месяц муздыкаюсь с интерфейсными мелочами, а точнее с тем, что обхожу и затыкаю разного рода дырки, баги и грабли у С#.
Извините - вышел из себя.
Код следующий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
private void textBox2_Enter(object sender, System.EventArgs e)
{
	listBox1.Items.Add("Enter");
}

private void textBox2_GotFocus(object sender, EventArgs e)
{
	listBox1.Items.Add("GotFocus- " + (sender as Control).Name + " -> " + ActiveControl.Name.ToString());
}

private void textBox2_Leave(object sender, System.EventArgs e)
{
	listBox1.Items.Add("Leave- " + (sender as Control).Name + " -> " + ActiveControl.Name.ToString());
}

private void textBox2_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
	listBox1.Items.Add("Validating-" + ActiveControl.ToString());
	e.Cancel = true;
}

private void textBox2_LostFocus(object sender, EventArgs e)
{
	listBox1.Items.Add("LostFocus- " + (sender as Control).Name + " -> " + ActiveControl.Name.ToString());
}
Резултат при переходе на нормальный контрол:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 /// Вход 
Enter
GotFocus	- textBox2 -> textBox2

 /// Выход в нормальный контрол 
LostFocus	- textBox2 -> textBox2
Leave		- textBox2 -> comboBox1
Validating	- comboBox1
Enter
GotFocus	- textBox2 -> textBox2
Теперь переход в ActiveX, предположим в Date Time ActiveX Control - Version 6.0 (SP4), но это не важно:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 /// Вход 
Enter
GotFocus	- textBox2 -> textBox2

 /// Выход в ActiveX 
LostFocus	- textBox2 -> textBox2
Leave		- textBox2 -> axDTPicker2
Validating	- axDTPicker2
Enter
GotFocus	- textBox2 -> textBox2

LostFocus	- textBox2 -> textBox2
Leave		- textBox2 -> axDTPicker2
Validating	- axDTPicker2
Enter
GotFocus	- textBox2 -> textBox2
Почувствуйте разницу...
...
Рейтинг: 0 / 0
03.09.2004, 12:19
    #32679097
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Control.Validating Event
а при выходе (потере фокуса) из каждого/любого контрола не изменяешь к.л. его свойств ? там можно такой каскад событий огрести ...
...
Рейтинг: 0 / 0
03.09.2004, 13:13
    #32679243
Astakhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Control.Validating Event
Нет...
Я специально сделал это примерчик, убедиться, что в чистом виде ситуация повторяется.
На самом деле задача была следующая, написать класс который в зависимости от передаваемой структуры создает свой интерфейс. При переходе в другой контрол, попытке его изменения, попытке применения новых данных и т.д. на все надо спрашивать разрешение на действие.
Т.е. если новые данные неудовлетворяют каким либо требованиям, то не выпускать из этого контрола, пока юзер не внесет нормальный данные либо откажеться от изменений. Или по какой либо причине просто запрещается выход из какого либо контрола (это уже не моя забота).
Но проблема в том, что как на входе в контролы, так и на выход (Leave и Validating) есть всяческие обработки, в том числе и посылки на получение разрешений на действия.
Уже дикое количество флагов для обхода того или иного глюка, создавать еще один - мочи нет. Кроме того я его поставлю, а завтра они исправят и опять работать не будет.
Может есть более простой способ не выпускать юзера из контрола?
...
Рейтинг: 0 / 0
04.09.2004, 16:23
    #32680386
Astakhov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Control.Validating Event
Народ, может кто-то подтвердить или опровергнуть такое поведение.
Может просто у меня со студией что-то или с мом ДНК...
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Control.Validating Event / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]