Создание control-а с параметрами по умолчанию

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

edyapd
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 03.10.2011 (Пн) 19:54

Создание control-а с параметрами по умолчанию

Сообщение edyapd » 30.05.2012 (Ср) 6:04

На форме создаю несколько Label.
Как можно сделать так, чтобы каждый раз не прописывать стиль, фон и другие параметры?
Пытался создать новый класс
Код: Выделить всё
    Public Class lProba
        Inherits Label
    End Class

Но не пойму как сюда вставить:
Код: Выделить всё
   Dim iSize As Decimal = 9.75
            Label1.BackColor = Color.Red
            Label1.Font = New Font("Lucida Console", iSize, FontStyle.Bold)

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.05.2012 (Ср) 7:50

В Public Sub New, например.
Хотя я бы для этого класс создавать не стал, скорее всего.

edyapd
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 03.10.2011 (Пн) 19:54

Re: Создание control-а с параметрами по умолчанию

Сообщение edyapd » 30.05.2012 (Ср) 9:56

Qwertiy писал(а):В Public Sub New, например.
Хотя я бы для этого класс создавать не стал, скорее всего.

Спасибо, заработало.
Готов выслушать ваш совет. Я то пока учусь.
Создание контролов в цикле я здесь видел. Но пока не смог применить в моей задаче.

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Создание control-а с параметрами по умолчанию

Сообщение Admiralisimys » 30.05.2012 (Ср) 18:19

edyapd писал(а):Создание контролов в цикле я здесь видел. Но пока не смог применить в моей задаче.

Например
Код: Выделить всё
Dim iSize As Decimal = 9.75
Dim fnt As New Font("Lucida Console", iSize, FontStyle.Bold)
Dim lb As Label
For i as Integer = 0 to 5 ' несколько Label.
            lb = New Label()
            lb.Parent = Me
            lb.BackColor = Color.Red
            lb.Font = fnt
Next i

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.05.2012 (Ср) 18:26

Admiralisimys писал(а):Например

Что тебя сегодня тянет давать подобные советы?
Зачем создавать в коде 6 Label'ов с пустым текстом в точке (0, 0)? Можно же просто написать функцию присваивающую параметры и вызвать по именаим Label'ов, созданных в дизайнере!

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Создание control-а с параметрами по умолчанию

Сообщение Admiralisimys » 30.05.2012 (Ср) 18:49

Qwertiy подразумевал кастомизизовать (задать надпись) каждый Label в отдельности.
А для координат может быть заранее подготовлен один из потомков Panel (или он сам же), ведь родителем (lb.Parent = Me) не обязательно должна быть форма.

А вот насчёт функции присвающий (или даже самой создающий с пресетами) параметры Label'ам даже как-то не подумал. Спасибо!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 30.05.2012 (Ср) 21:07

На самом деле, я бы все сделал в дизайнере. Сначала настраиваешь один Label, копируешь его в буфер, вставляешь, меняешь надпись и название, а оформление остаётся.

Периодически такой код использую:
Код: Выделить всё
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        CorrectTextBoxes(Me)
    End Sub

    Private Sub CorrectTextBoxes(Base As Control)
        If Base.Controls IsNot Nothing Then
            For Each Ctrl As Control In Base.Controls
                CorrectTextBoxes(Ctrl)
                Dim Txt As TextBox = TryCast(Ctrl, TextBox)
                If Txt IsNot Nothing Then
                    AddHandler Txt.KeyDown, AddressOf Txt_KeyDown
                End If
            Next Ctrl
        End If
    End Sub

    Private Sub Txt_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs)
        If e.KeyCode = Keys.A And e.Control Then CType(sender, TextBox).SelectAll()
    End Sub
Возможно, в данной ситуации аналогичный код тоже подойдёт.

Создавать контролы из кода в большинстве случаев не нужно.

Admiralisimys писал(а):ведь родителем (lb.Parent = Me) не обязательно должна быть форма

Me - это текущий класс. Значит либо форма, либо некий контрол, который ты сейчас создаёшь. А даже если поменять на что-то выравнивающее элементы, типа FlowLayoutPanel, то зачем там 5 лейблов подряд?

edyapd
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 03.10.2011 (Пн) 19:54

Re: Создание control-а с параметрами по умолчанию

Сообщение edyapd » 31.05.2012 (Чт) 9:28

Qwertiy писал(а):На самом деле, я бы все сделал в дизайнере. Сначала настраиваешь один Label, копируешь его в буфер, вставляешь, меняешь надпись и название, а оформление остаётся.

Задача у меня такая: к Com порту подключаются разные устройства. Для каждого из них надо вывести данные, из этого устройства, на экран. Но у них разное кол-во этих данных. На счет функции в которую передавать координаты и имя нового Label я понял. Такой вариант думаю смогу легко сделать. А вот с приведеным кодом пока не разобрался. Сейчас попробую поизучать.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.05.2012 (Чт) 9:57

edyapd писал(а):На счет функции в которую передавать координаты и имя нового Label я понял.

Не имя, а текст, если ты хочешь создавать так.

edyapd писал(а):Сейчас попробую поизучать.

Скажи как закончишь. Если непонятно, могу объяснить. Для чего он, хотя бы ясно?

edyapd
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 03.10.2011 (Пн) 19:54

Re: Создание control-а с параметрами по умолчанию

Сообщение edyapd » 31.05.2012 (Чт) 13:28

Qwertiy писал(а):Скажи как закончишь. Если непонятно, могу объяснить. Для чего он, хотя бы ясно?

Код: Выделить всё
    Private Sub CorrectTextBoxes(Base As Control) ' Ругается здесь
        If Base.Controls IsNot Nothing Then
            For Each Ctrl As Control In Base.Controls ' И здесь на слово Control. Пишет "Требуется тип"

Пока сам не попробую позапускать и поэксперементировать ясно не станет

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Re: Создание control-а с параметрами по умолчанию

Сообщение burik » 31.05.2012 (Чт) 13:50

edyapd писал(а):Задача у меня такая: к Com порту подключаются разные устройства. Для каждого из них надо вывести данные, из этого устройства, на экран. Но у них разное кол-во этих данных. На счет функции в которую передавать координаты и имя нового Label я понял. Такой вариант думаю смогу легко сделать. А вот с приведеным кодом пока не разобрался. Сейчас попробую поизучать.


Ну и кто ж для такого дела кучу лейблов использует?
Есть же куча контролов, специально предназначенных для отображения списков / таблиц. Можно, в конце-концов, формировать html-страничку и отображать ее (тогда и внешний вид менять легко с помощью CCS, да и генерацию можно сделать на основе шаблонов).
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.05.2012 (Чт) 15:12

edyapd писал(а):Ругается здесь

Не должен. У тебя WinForms приложение? Какая версия VS?

edyapd писал(а):Пока сам не попробую позапускать и поэксперементировать ясно не станет

Не поможет, смотри код :)

edyapd
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 03.10.2011 (Пн) 19:54

Re: Создание control-а с параметрами по умолчанию

Сообщение edyapd » 31.05.2012 (Чт) 15:28

burik писал(а):Ну и кто ж для такого дела кучу лейблов использует?
Есть же куча контролов, специально предназначенных для отображения списков / таблиц. Можно, в конце-концов, формировать html-страничку и отображать ее (тогда и внешний вид менять легко с помощью CCS, да и генерацию можно сделать на основе шаблонов).

Когда знаешь, что, где и как применить тогда и вопросов таких как у меня не возникает. Я же изучаю VB чисто для себя. Соответствено преподавателей нет. Получается, что ищу пример, переделываю его под свои надобности. Когда то, так же, изучал Pascal, по встроеным хелпам.
Qwertiy писал(а):Не должен. У тебя WinForms приложение? Какая версия VS?

У меня отдельно установлен VB2008

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Re: Создание control-а с параметрами по умолчанию

Сообщение burik » 31.05.2012 (Чт) 15:40

edyapd писал(а):Когда знаешь, что, где и как применить тогда и вопросов таких как у меня не возникает.

Ну вот теперь ты знаешь, что лейблы так не применяют.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.05.2012 (Чт) 18:43

burik писал(а):Ну вот теперь ты знаешь, что лейблы так не применяют.

При желании и необходимости всё применяют :)

edyapd писал(а):Ругается здесь

Ну попробуй удалить As Control...

edyapd
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 03.10.2011 (Пн) 19:54

Re: Создание control-а с параметрами по умолчанию

Сообщение edyapd » 31.05.2012 (Чт) 21:19

burik писал(а):Ну вот теперь ты знаешь, что лейблы так не применяют.

Меня вполне устраивает
Изображение

Qwertiy писал(а):Скажи как закончишь. Если непонятно, могу объяснить. Для чего он, хотя бы ясно?

Что у меня получилось:
При загрузке формы, программа пробегается по всем контролам и всем текстбоксам назначает обработчик.
Пока в голову не лезет как могу применить в своей задаче.
Рисунок выше привел, то что мне требовалось получить. Можно было создать несколько макетов и подставлять их в зависимости от количества данных. Мне кажется динамическое создание более правильное.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 31.05.2012 (Чт) 22:06

Лейблы что, прозрачные?
Удивляешь :) Знаешь, как сделать прозрачные лейблы, но спрашиваешь, как им задать цвет и шрифт...

edyapd писал(а):Что у меня получилось:

И что было не так?

edyapd писал(а):При загрузке формы, программа пробегается по всем контролам и всем текстбоксам назначает обработчик.

Ага. А что за обработчик понятно?

edyapd писал(а):Пока в голову не лезет как могу применить в своей задаче.

Можно так обойтись со всеми лейбломи в неком контейнере. Не обязательно же присваивать обработчик, можно и что-то другое сделать.

edyapd
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 03.10.2011 (Пн) 19:54

Re: Создание control-а с параметрами по умолчанию

Сообщение edyapd » 01.06.2012 (Пт) 7:52

Qwertiy писал(а):Лейблы что, прозрачные? Удивляешь :) Знаешь, как сделать прозрачные лейблы, но спрашиваешь, как им задать цвет и шрифт...
Не, вопрос в другом стоял. Вопрос был так: Не задавать для каждого лейбла все параметры, а что бы вставил его и уже по умолчанию всё стоит. По этому сперва про Класс и подумал. Потом по твоему совету переделал на функцию. Кидаю в неё Текст и Координаты.
Qwertiy писал(а):
edyapd писал(а):Что у меня получилось:

И что было не так?
Это я про код который ты дал.
Qwertiy писал(а):
edyapd писал(а):При загрузке формы, программа пробегается по всем контролам и всем текстбоксам назначает обработчик.

Ага. А что за обработчик понятно?
Выделение текста в текстбоксе по Ctrl+А
Qwertiy писал(а):
edyapd писал(а):Пока в голову не лезет как могу применить в своей задаче.

Можно так обойтись со всеми лейбломи в неком контейнере. Не обязательно же присваивать обработчик, можно и что-то другое сделать.

Согласен, что таким образом их можно все переиначить. Но у меня еще задача стояла вывести их столько, сколько нужно в данный момент.
Сейчас их у меня 30 строк, 2 колонки. Соответственно на панели выскочила полоса прокрутки. А в другой раз их будет всего 10 строк и 2 колонки. И полосы не будет

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Re: Создание control-а с параметрами по умолчанию

Сообщение burik » 01.06.2012 (Пт) 9:38

Ну если хочешь все же создавать лейблы, сделай фабрику. Т.е. напиши класс, который содержит свойства для описания того какие параметры должны быть у каждого лейбла и метод CeateInstance который будет принимать, например родителя для лейбла и его текст.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 01.06.2012 (Пт) 11:06

edyapd писал(а):Это я про код который ты дал.

Я понял. Ты же писал, что он не компилировался, поэтому и спросил, что не так было.

edyapd
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 03.10.2011 (Пн) 19:54

Re: Создание control-а с параметрами по умолчанию

Сообщение edyapd » 01.06.2012 (Пт) 17:37

Воспользовался этим:
Qwertiy писал(а):Ну попробуй удалить As Control...

burik писал(а):Ну если хочешь все же создавать лейблы, сделай фабрику. Т.е. напиши класс, который содержит свойства для описания того какие параметры должны быть у каждого лейбла и метод CeateInstance который будет принимать, например родителя для лейбла и его текст.

Изначально так и хотел сделать. Даже сделал (не без помощи конечно) и получилось. Но тут посоветовали сделать это всё таки через функцию. Что в принципе меня тоже устраивает.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Re: Создание control-а с параметрами по умолчанию

Сообщение burik » 01.06.2012 (Пт) 21:45

edyapd писал(а):Изначально так и хотел сделать. Даже сделал (не без помощи конечно) и получилось. Но тут посоветовали сделать это всё таки через функцию. Что в принципе меня тоже устраивает.

Изначальный план был лучше.
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 01.06.2012 (Пт) 22:47

burik писал(а):Изначальный план был лучше.

Любитель паттернов, скажи, чем же он лучше? Только объективно (прямо по пунктам), а не то, что раз это кто-то придумал, то оно лучше.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

    TopList