Как получить значение компонента?

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

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

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Как получить значение компонента?

Сообщение sergey-911 » 28.09.2008 (Вс) 8:45

Доброго времени суток уважаемые.
Как получить значение компонента?
Сделал компонент, позволяющий вводить 2-е даты (интервал времени). Этот компонент помещен в другой. После заполнения компонента, он должен передать в родительский компонент текстовое значение, в виде от Дата1 до Дата2. Но как это сделать, не знаю! Если в родительский компонент поместить текстбокс - то все ОК. Видимо в нем есть свойство, которое забронировано по умолчанию. Как его реализовать в своем компоненте?
Сделал для возврата значение, но оно не прокатывает:
Код: Выделить всё
    'Результат компонента
    Private valValue As String
    <Description("String Result"), Category("Values")> _
    Public Property Value() As String
        Get
            'Результат компонента
            If valDate1 <> Nothing And valDate2 <> Nothing Then
                valValue = Label1.Text & " " & dtTimePicker1.Value & " " _
                & Label2.Text & " " & dtTimePicker2.Value
            Else
                valValue = Nothing
            End If
            'Передача хначения компонентом
            'Parent.Controls = MyBase
            Return valValue
        End Get
        Set(ByVal value As String)
            'Результат компонента
            valValue = value
        End Set
    End Property
С уважением, Сергей.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Как получить значение компонента?

Сообщение Sebas » 28.09.2008 (Вс) 9:11

из того, что с трудом сумел понять.

1. свойство должно быть ReadOnly
2. проверка на Nothing должна выглядеть
Код: Выделить всё
If value is Nothing then

3. And используй только для логического сложения, для объединения условий используй AndAlso.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Re: Как получить значение компонента?

Сообщение sergey-911 » 28.09.2008 (Вс) 9:43

Перефразирую вопрос, как вернуть свойство компонента в родительский контейнер?

Sebas писал(а):из того, что с трудом сумел понять.

1. свойство должно быть ReadOnly
2. проверка на Nothing должна выглядеть
Код: Выделить всё
If value is Nothing then

3. And используй только для логического сложения, для объединения условий используй AndAlso.


Спасибо Sebas.
1. Свойство сделал ReadOnly
2. Проверка
Код: Выделить всё
If value is Nothing then
не срабатывает (ошибка), но дело не в этом
3. Тоже подправил

Но эфект - тотже.

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

Мой компонент я назвал BetweenData.
Он помещается в ячейку (1,3) коммерческого грида C1FlexGrid. При нажатии на нее мой контрол отображается. Я в нем (контроле) устанавливаю временной интервал, все ОК. Затем нажимаю ввод, фокус переходит на другую ячейку грида, а вместо того, чтобы в ячейке отобразилось свойство Value компонента BetweenData - ячейуа становится пустой!!! :(
Как сделать, чтобы ячейка отображала свойство Value компонента BetweenData. Ведь, если в ячейку поместить текстбокс, либо любо TimePicker, либо любой другой компонент предназначенный для ввода значений, разработанный кем угодно, только не мной, то все ОК -грид отображает нужное значение. Если же в ячейке мой контрол - то нет! :eye:
Вызов компонента происходит следующим образом:
Код: Выделить всё
        Dim dateEdit As New betweenData.betweenData
        dateEdit = BetweenData1
        Dim cs As C1.Win.C1FlexGrid.CellStyle
        cs = C1FlexGrid1.Styles.Add("myDateEditor")
        cs.DataType = GetType(String)
        cs.Editor = dateEdit
        C1FlexGrid1.SetCellStyle(1, 3, "myDateEditor")
Последний раз редактировалось sergey-911 28.09.2008 (Вс) 10:28, всего редактировалось 2 раз(а).
С уважением, Сергей.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Re: Как получить значение компонента?

Сообщение sergey-911 » 28.09.2008 (Вс) 10:25

И еще, как при щелчке на кнопке контрола закрыть его, что-то вроде
Код: Выделить всё
Me.Close()

формы
С уважением, Сергей.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Re: Как получить значение компонента?

Сообщение Sebas » 28.09.2008 (Вс) 21:35

sergey-911 писал(а):
Думаю, должен быть атрибут свойства, говорящий, что это свойство является возвращаемым по умолчанию.
Веть в текстбоксе свойство Text является таковым...


не является! Ты путаешь c VB6

sergey-911 писал(а):
Мой компонент я назвал BetweenData.
Он помещается в ячейку (1,3) коммерческого грида C1FlexGrid. При нажатии на нее мой контрол отображается. Я в нем (контроле) устанавливаю временной интервал, все ОК. Затем нажимаю ввод, фокус переходит на другую ячейку грида, а вместо того, чтобы в ячейке отобразилось свойство Value компонента BetweenData - ячейуа становится пустой!!! :(
Как сделать, чтобы ячейка отображала свойство Value компонента BetweenData. Ведь, если в ячейку поместить текстбокс, либо любо TimePicker, либо любой другой компонент предназначенный для ввода значений, разработанный кем угодно, только не мной, то все ОК -грид отображает нужное значение. Если же в ячейке мой контрол - то нет! :eye:


может ToString переопределить?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Re: Как получить значение компонента?

Сообщение sergey-911 » 29.09.2008 (Пн) 10:11

Sebas писал(а):может ToString переопределить?


Извини Sebas, что значит переопределить? Написать, что Value.ToString? Что это даст? Или что? Этот тип и так String. Вопрос - как компоненту присвоить значение по умолчанию (это свойство). Ведь при запуске проекта компонента в панеле свойств у него появляется свойство Value с нужным значением. Вот, только, когда компонент в контейнере, то он контейнеру не возвращает нужное значение. Видимо контейнер не знает, что ассоциировать с нужным значением компонента.
Вложения
betweenData.rar
Данный компонент
(83.21 Кб) Скачиваний: 52
С уважением, Сергей.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Re: Как получить значение компонента?

Сообщение sergey-911 » 29.09.2008 (Пн) 15:12

Ура товарищи! :D
Код: Выделить всё
    Private Sub betweenData_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs)Handles Me.VisibleChanged
         MyBase.Text = Value
    End Sub

После этого - все заработало. Грид принимает значение компонента!
Оказалось, что у компонента уже есть свойство "Text", только оно не подсвечивается в редакторе VB.Net. Кстати, почему?
Исправленный компонент, вдруг кому пригодится...
Вложения
betweenData.rar
Исправленный компонент
(83.79 Кб) Скачиваний: 49
С уважением, Сергей.


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

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

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

    TopList