Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 1
Регистрация: 11.09.2010
Сообщений: 25

Для нескольких ComboBox в ходе программы нужно менять свойство DropDownStyle

01.09.2014, 23:29. Показов 1696. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не уверен что правильно указал заголовок, но суть вот в чем. У меня есть несколько ComboBox которым в ходе программы нужно менять свойство DropDownStyle

Я только познаю платформу .NET , а до этого писал очень давно еще на VB 6.0 Решил воспользоватся чудесной штукой (не знаю как называется ) , которая в оглавлении выглядит как (sender As Object). В общем, в нужных мне событиях вышла такая штука

VB.NET
1
DropDownStyle_off(sender)
и так же подпрограмма DropDownStyle_off

VB.NET
1
2
3
Sub DropDownStyle_off(sender As Object)
        sender.DropDownStyle =DropDownList
    End Sub
только вот это все дело не работало. Позже покопавшись я сообразил что нужно указать класс, то есть выглядит все

VB.NET
1
2
3
Sub DropDownStyle_off(sender As Object)
        sender.DropDownStyle = ComboBoxStyle.DropDownList
    End Sub
Собственно вопросы.
1. В каких случаях нужно указывать класс, то есть писать полностью ComboBoxStyle.DropDownList а не просто свойство DropDownList?
2. Где брать этот самый класс? Неужели каждый раз нужно гуглить чтобы узнать от чего следует каждое свойство
3. Использование sender`а в данном случае это и есть делегирование? ))) Не мог понять что это. Увы VB 6.0 не является объектно ориентированным и для меня это новое.

Помогите разобраться самоучке плз ) Заранее извините, опять же потому что я самоучка, мне тяжело правильно сформировать свою реч, назвать все своими именами и ясно выразится.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.09.2014, 23:29
Ответы с готовыми решениями:

Как задать свойство dropdownstyle у второго столбца DGV, чтобы combobox открывался по одному щелчку
Всем привет.Подскажите пожалуйста, есть кусок кода Dim DGVRS1 As New DataGridViewComboBoxColumn() If DGV1.RowCount = 0 Then ...

ComboBox DropDownStyle выбор функций
Видел туда можно писать текст, но как сделать выбор вот пример первое типа "Удалить текст" и другое "Вставить текст" И по...

Как сделать переменную только для чтения в ходе работы программы?
У меня переменная в которую я кладу десереализованные данные, и больше не меняю в ходе работы только беру оттуда. Но не пойму как она все...

4
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
02.09.2014, 04:44
Лучший ответ Сообщение было отмечено TRAMPLE как решение

Решение

Очень рекомендую включить генерацию ошибок при неявном преобразовании объектов. Свойства проекта→Compile:

Это научит тебя понимать, что на самом деле происходит, когда ты пишешь:
Цитата Сообщение от TRAMPLE Посмотреть сообщение
VB.NET
1
sender.DropDownStyle = ComboBoxStyle.DropDownList
sender передаётся в метод как Object. Да, ты знаешь, что это ComboBox, но методу это неизвестно до момента выполнения. Когда этот код будет выполняться, sender будет приведён к типу того объекта, который передался в метод. А затем уже будет вызвано свойство DropDownStyle (если оно существует у этого нового объекта). По умолчанию, в vb компилятор игнорирует такое неявное преобразование, что, по моему мнению, не способствует качеству кода. Поэтому, эту строку нужно записать, явно задавая приведение к нужному типу:
C#
1
DirectCast(sender, ComboBox).DropDownStyle = ComboBoxStyle.DropDownList
Дополнительное преимущество явного преобразования в том, что будет работать подсказка IntelliSense.

Ну а теперь к вопросу темы:
Цитата Сообщение от TRAMPLE Посмотреть сообщение
Неужели каждый раз нужно гуглить чтобы узнать от чего следует каждое свойство
Чтобы знать, что использовать, нужно смотреть тип объекта, который стоит слева от знака =. Да, каждый раз нужно смотреть в msdn, хотя бы нажав F1 на интересующем свойстве. И в статье справки тип будет указан прямо. В этом можно убедиться, посмотрев статью. Со временем наиболее часто используемые типы запомнятся.
Кроме того, если после знака = нажать Ctrl+Пробел, то подсказка сама покажет возможные значения данного свойства. Но только в том случае, если объект, к свойству которого ты обращаешься, имеет тип, отличный от object. Если подсказка не работает, то стоит задуматься над правильностью того, что ты пишешь.

Ну и наконец.Тип свойства DropDownStyle — это не класс, а перечисление ComboBoxStyle
2
1 / 1 / 1
Регистрация: 11.09.2010
Сообщений: 25
02.09.2014, 20:28  [ТС]
Большое спасибо за разъяснения.

еще парочка моментов )

Цитата Сообщение от ViterAlex Посмотреть сообщение
VB.NET
1
DirectCast(sender, ComboBox).DropDownStyle = ComboBoxStyle.DropDownList
Я так понимаю что если я знаю что процедура (подпрограмма) будет использоваться только для ComboBox то вместо вашего варианта с явным преобразованием, sender можно объявить не Object а конкретно как ComboBox

VB.NET
1
2
3
Sub DropDownStyle_off(sender As ComboBox)
        sender.DropDownStyle = ComboBoxStyle.DropDownList
    End Sub
Цитата Сообщение от ViterAlex Посмотреть сообщение
По умолчанию, в vb компилятор игнорирует такое неявное преобразование, что, по моему мнению, не способствует качеству кода.
Я конечно новичок, но ведь тем и хорошо что он игнорирует не явное преобразование, так как мы можем одну процедуру использовать для нескольких объектов имеющих одинаковые свойства. Например изменения шрифта и его цвета на определенный. Эта подпрограммка подойдет для массы объектов которые имеют возмножность отображения текста. В случае же явного преобразования она сгодится только для одного типа объекта.
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
03.09.2014, 02:12
Цитата Сообщение от TRAMPLE Посмотреть сообщение
мы можем одну процедуру использовать для нескольких объектов имеющих одинаковые свойства.
Если мы говорим о контролах на форме, то да, можем. И объект объявлять как Control. Но здесь не будет неявного преобразования, а будут работать принципы наследования, поскольку любые элементы управления на форме наследуют класс Control.
Отказ от неявного преобразования позволит тебе избежать многих ошибок на начальных этапах. Но это лишь моё мнение. И оно не совпадает с мнением разработчиков vb.net
1
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
03.09.2014, 15:45
Цитата Сообщение от TRAMPLE Посмотреть сообщение
тем и хорошо что он игнорирует не явное преобразование, так как мы можем одну процедуру использовать для нескольких объектов имеющих одинаковые свойства
Может и хорошо, но... Я на другом форуме сделал для одного форумчанина процедуру использующую позднее связывание (типа sender.Свойство). У меня всё работало, а у него нет. Так что лучше включить режим ограничения неявных преобразований.
VB.NET
1
Option Strict On
З.Ы. Да и культура кода повысится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2014, 15:45
Помогаю со студенческими работами здесь

Свойство ReadOnly для ComboBox
Доброго времени суток, подскажите как сделать, чтобы пользователь не мог ничего написать в элементе ComboBox, мог только выбирать из...

Оптимизация программы, работающей с QUIK: нужно ли менять язык программирования?
Привет всем! Есть специалисты, кто знает C++, Java, C#, QUIK и QPILE? После работы на QPILE столкнулся с проблемой, недостаточное...

Свойство DroppedDown для DateTimePicker и ComboBox
Открыть программно список выбора для ComboBox можно так: ComboBox1->DroppedDown = true; в DateTimePicker тоже есть такое свойство...

Свойство не изменяет значение, переданное конструктором в ходе создания экземпляра класса
Создаем класс Person, в нем есть свойство - пол(sex), когда я создаю экземпляр класса, и передю ему значения этого свойства, то остальные...

Свойство Tag для выбранной строки combobox
как реализовать свойство Tag для выбранной строки combobox


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru