|
Доступность Control'a
|
|||
---|---|---|---|
#18+
Добрый день. Появилась необходимость вычислять "доступен" ли контрол для пользователя. Под доступностью контрола понимается возможность пользователю видеть его и внести туда данные. Будем считать, что сам контрол не ReadOnly и Visible. Для примера есть TabControl с двумя страницами, на каждой из которых TextBox. И если выбрана первая страница TabControl, то второй TextBox недоступен, а первый - доступен. Если вторая, то наоборот. Может быть вариант что контрол находится на Panel у которой Visible=False, тогда контрол тоже будет не доступен. Понятно что можно написать проверки для каждого такого случая, но быть может есть какой-то более универсальный способ узнать "прорисован" ли контрол в видимой части формы. Нашел вот такой код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
В нем на сколько я понял через WinAPI проверяется какой контрол находится по координатам исходного. Но вот для примера с TabControl он не сработал. В аттаче как раз проект с реализацией этого кода ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 17:54 |
|
Доступность Control'a
|
|||
---|---|---|---|
#18+
Тройка Код: c# 1.
ещё один7 пациент ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 19:34 |
|
Доступность Control'a
|
|||
---|---|---|---|
#18+
Тройка, А зачем все эти телодвижения? Ну не видно контрола да и не видно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2014, 20:21 |
|
Доступность Control'a
|
|||
---|---|---|---|
#18+
Тройка, Это у вас не система контроля доступа? Что вы хотите делать, когда узнаете что контрол доступен? Если проверять, можно ли его показать конкретному пользователю и закрыть контрол если пользователь не имеет на него разрешение, то надо делать наоборот.... :-) В вашей аппликации вы должны точно знать, что видимо, что не видимо, и в какой момент. Припарки из АПИ - это для работы с кодом, который не ваш, и его нельзя изменить или расширить.... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2014, 07:20 |
|
Доступность Control'a
|
|||
---|---|---|---|
#18+
D129Тройка, Это у вас не система контроля доступа? Что вы хотите делать, когда узнаете что контрол доступен? Если проверять, можно ли его показать конкретному пользователю и закрыть контрол если пользователь не имеет на него разрешение, то надо делать наоборот.... :-) В вашей аппликации вы должны точно знать, что видимо, что не видимо, и в какой момент. Припарки из АПИ - это для работы с кодом, который не ваш, и его нельзя изменить или расширить.... Все практически с точностью да наоборот) Есть форма на которую динамически будут подгружаться контролы. Контролы эти будут пользовательские и будут иметь признак являются ли они обязательными для ввода. Поэтому для дополнительной(!) проверки я подумал, что быть может имеет смысл проверить что если контрол "доступен" для ввода и является обязательным, то он не может остаться с пустым значением. Но если на основе "интерфейсной ситуации" обязательный контрол оказался не доступен (например, на неактивной вкладке TabControl), то он не должен требовать ввода значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2014, 09:29 |
|
Доступность Control'a
|
|||
---|---|---|---|
#18+
То есть пользователь переключил закладку и ОПА - обязательные поля стали необязательными ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2014, 10:03 |
|
Доступность Control'a
|
|||
---|---|---|---|
#18+
Shocker.ProТо есть пользователь переключил закладку и ОПА - обязательные поля стали необязательными ))) С другой стороны TabControl может быть от девэкспреса с ShowTabHeader= false, когда пользователь не может сам перещелкнуть закладку. А закладки меняется в зависимости от соседнего CheckBox'a. К сути вопроса это особого отношения не имеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2014, 10:28 |
|
Доступность Control'a
|
|||
---|---|---|---|
#18+
ТройкаD129Тройка, Это у вас не система контроля доступа? Что вы хотите делать, когда узнаете что контрол доступен? Если проверять, можно ли его показать конкретному пользователю и закрыть контрол если пользователь не имеет на него разрешение, то надо делать наоборот.... :-) В вашей аппликации вы должны точно знать, что видимо, что не видимо, и в какой момент. Припарки из АПИ - это для работы с кодом, который не ваш, и его нельзя изменить или расширить.... Все практически с точностью да наоборот) Есть форма на которую динамически будут подгружаться контролы. Контролы эти будут пользовательские и будут иметь признак являются ли они обязательными для ввода. Поэтому для дополнительной(!) проверки я подумал, что быть может имеет смысл проверить что если контрол "доступен" для ввода и является обязательным, то он не может остаться с пустым значением. Но если на основе "интерфейсной ситуации" обязательный контрол оказался не доступен (например, на неактивной вкладке TabControl), то он не должен требовать ввода значения. Для динамической подгрузки в стиле - это "берем, а это сейчас берем а потом нет " - атрибуты. Атрибут это класс, который может обеспечить поведение, зависимое от внешних условий. Еще один путь - это интерфес, который будет называться (напрмер) "IShouldBeFilledOut" - и дальше будет вызываться всегда, при закрытии, например, и каждая реализация будет сигналить по необходимости. Есть еще всякие готовые штуки - типа ErrorProvider (не помню точно как там в винформах) - тоже может подойти. Там уже и визуализация есть.... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2014, 10:30 |
|
Доступность Control'a
|
|||
---|---|---|---|
#18+
ТройкаПоэтому для дополнительной(!) проверки я подумал, Ну фу, от сердца отлегло. А то я подумал было уже, что началось восстание машин! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2015, 17:30 |
|
Доступность Control'a
|
|||
---|---|---|---|
#18+
Эх, прям ностальгия пробрала)) А всего то надо было найти свойство CanSelect в System.Windows.Forms.Control. Может кому-то пригодится тоже. И кстати, проект живет и работает на этой штуке весьма хорошо и очень удобно)) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2017, 13:34 |
|
|
start [/forum/topic.php?fid=20&fpage=45&tid=1399950]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
others: | 298ms |
total: | 490ms |
0 / 0 |