Как вернуть значение контрола?

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

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

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

Как вернуть значение контрола?

Сообщение sergey-911 » 06.10.2008 (Пн) 21:08

Доброго времени суток уважаемые.
Создал контрол для ввода даных, состоящий из 2-х ячеек ввода даты. Компонент должен вернуть диапазон (от Дата1 до Дата2) в ячейку грида. Но как? сделал свойство Rezult, которое должно возвращать нужное значение. Как указать компоненту, что это свойство Rezult должно вернуться и использоваться по-умолчанию? Как свойство Text или Value у аналогичных компонентов для ввода данных? Попробовал MyBase.Text=Rezult, но возвращает нипойми что... И вообще, что значит MyBase.Text?
Плиз, помогите сделать значение компонента - значеним по-умолчанию. Уже который день бьюсь. :(
С уважением, Сергей.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

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

Сообщение Viper » 07.10.2008 (Вт) 7:54

Во-первых, свойство по умолчанию у компонентов в NET отсутствует. Во-вторых, не Rezult, а Result, в-третьих, MyBase.Text возвращает/устанавливает свойство Text базового класса для твоего контрола.
А теперь попробую ответить. У тебя ввод производится, как я понял, в два TextBox'а. Следовательно, тебе надо считать введенные значения, приизвести с ними необходимые действия, и в процедуре Get свойства Result вернуть полученное значение.
Весь мир матрица, а мы в нем потоки байтов!

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

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

Сообщение sergey-911 » 07.10.2008 (Вт) 19:24

Спасибо Viper.
Получить нужное значение в свойстве Result я могу. Но! Разрабатываемый контрол вызывается в ячейке грида следующим образом:
Код: Выделить всё
        Dim c As C1.Win.C1FlexGrid.CellStyle
        c = C1FlexGrid1.Item(1, 3)
        c = C1FlexGrid1.Styles.Add("myDateEditor001")
        c.DataType = GetType(String)
        Dim de As New betweenData.betweenData
        C1FlexGrid1.SetCellStyle(1, 3, "myDateEditor001")
        c.Editor = de

Т.е. есть грид C1FlexGrid1. Ячейке (1, 3), при загрузке устанавливается редактор (стиль) в виде своего компонента (betweenData). При нажатии на эту ячейку появляется в ней компонент для ввода диапазона значения. При нажатии на Enter, или клике мышкой по другой ячейке компонент скрывается, а вместо него должно появится значение контрола.
Так и происходит с любым компонентом для ввода данных, написанным любой конторой, только не мной. Указать, что значение ячейки должно быть равно свойству Result моего компонента не представляется возможным. А по-умолчанию, естественно компонент ничего не возвращает. Пытался в компоненте написАть:
Код: Выделить всё
MyBase.Text = Result

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

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

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

Сообщение Nord777 » 07.10.2008 (Вт) 19:41

Атрибут DefaultMemberAttribute?
Атрибут DefaultPropertyAttribute?
Посмотреть компонент(..FlexGrid..) Reflector'ом?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

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

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

Сообщение sergey-911 » 09.10.2008 (Чт) 6:42

Спасибо "Nord777
Nord777 писал(а):Атрибут DefaultMemberAttribute?
Атрибут DefaultPropertyAttribute?
Посмотреть компонент(..FlexGrid..) Reflector'ом?


1) Что за атрибут DefaultMemberAttribute?
1) Что за атрибут DefaultPropertyAttribute?
3) Как в моем случае использовать Reflector? В книге сказано, что нужен для обмена сообщениями, между контролом и другими компонентами. Но примера реализации нет. :roll:
P.S. В моем случае, грид заполняется не рекордсетом.
Объясни плиз. :oops:
С уважением, Сергей.

1Steps
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 505
Зарегистрирован: 20.12.2006 (Ср) 0:50
Откуда: New York

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

Сообщение 1Steps » 09.10.2008 (Чт) 6:59

Удалена за ненадобностью.

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

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

Сообщение sergey-911 » 09.10.2008 (Чт) 13:02

Спасибо.

Вот только не разобрался, в чем дело.
Попробовал
Код: Выделить всё
Imports System.Reflection

<DefaultMemberAttribute("Age")> _
Public Class UserControl1
    Public ReadOnly Property Age() As String
        Get
            Return "Result = 20"
        End Get
    End Property
End Class


- не помогает. :cry:

Насколко я понял, в данном примере, свойство Age должно вернуть значение компонента - Result = 20. Для того, чтобы так и было, нужно ли при вызове компонента дополнительно что-либо объявлять? В компоненте?
С уважением, Сергей.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

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

Сообщение Viper » 09.10.2008 (Чт) 14:02

sergey-911, ты хочешь в качестве значения Age вернуть строку "Result = 20" или что?
Весь мир матрица, а мы в нем потоки байтов!

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

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

Сообщение sergey-911 » 09.10.2008 (Чт) 15:57

Viper писал(а):sergey-911, ты хочешь в качестве значения Age вернуть строку "Result = 20" или что?

Спасибо Viper
"Result = 20" - это для примера, чтобы код не увеличивать, понять, как вернуть значение по-умолчанию. На деле, из одной и той же ячейке грида, могут быть вызваны 5 компонентов, в зависимости от условия:
1 - компонент для ввода текста (соответственно, возвращает текст)
2 - компонент для ввода диапазона дат (возвращает диапазон дат)
3 - компонент для ввода одной даты (возвращает дату)
4 - компонент для ввода диапазона чисел (возвращает диапазон чисел)
5 - компонент для ввода одного числа (возвращает число)
Если поможет разобраться - выложу компоненты и проект.
С уважением, Сергей.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

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

Сообщение Nord777 » 09.10.2008 (Чт) 17:51

Если поможет разобраться - выложу компоненты и проект.
Давно уже надо было.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

sand
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 20.06.2005 (Пн) 13:14

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

Сообщение sand » 09.10.2008 (Чт) 17:52

Может переопределить свойство контрола ToString

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

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

Сообщение sergey-911 » 09.10.2008 (Чт) 19:11

Nord777 писал(а):
Если поможет разобраться - выложу компоненты и проект.
Давно уже надо было.


Прикрапляю проект в файле. Если будут проблемы с компонентами - пишите в личку.
Буду рад любой помощи.
Вложения
betweenNumber.rar
Тестовый проект фильтра
(1.03 МиБ) Скачиваний: 50
С уважением, Сергей.

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

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

Сообщение sergey-911 » 09.10.2008 (Чт) 19:22

До ума проект не доведен, только скилет. Кликая по ячейке последней колонки, в ячейке появляется компонент для ввода диапазона чисел. Чтобы в ячейку вернуть значение - кнопка с галочкой. Возвращает неправильно, т. к. использовал свойство "mybase.text" Хотелось бы возвратить свойством "Result", см. проект выше.
С уважением, Сергей.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

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

Сообщение Nord777 » 09.10.2008 (Чт) 21:53

Возвращает неправильно,...
В чем это проявляется? Я никаких аномалий не обнаружил. Ввёл во второе поле число 200 -> нажал галочку -> получил "0 то 200"

Хотелось бы возвратить свойством "Result"
Не выйдет.
А собственно какая разница? Почему не Text?

Добавлено:
Еще есть возможность реализовать в твоем компоненте интерфейс C1.Win.C1FlexGrid.IC1EmbeddedEditor.
Тогда возвращать данные будешь через функцию:
Object Browser писал(а):Function C1EditorGetValue() As Object
Member of C1.Win.C1FlexGrid.IC1EmbeddedEditor
Summary:
Gets the current value of the editor.

Return Values:
The current value of the editor (any data type).
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

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

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

Сообщение sergey-911 » 10.10.2008 (Пт) 7:56

Спасибо Nord777.

Nord777 писал(а):
Возвращает неправильно,...В чем это проявляется? Я никаких аномалий не обнаружил. Ввёл во второе поле число 200 -> нажал галочку -> получил "0 то 200"

Когда у контрола есть 2-е кнопки - то возвращает правильно. Если кнопки убрать, и возвращать MyBase.Text = Result по событию Leave, когда пользователь нажимает ввод, либо кликает по другой ячейке грида - то ошибка! Если поможет - то выложу предыдущий проект. При пошаговой отладке в нем было видно, как при выходе из компонента, свойство Result показывало правильное значене, присваивало его компоненту MyBase.Text = Result, а ячейка грида, после скрытия компонента отображала предыдущее значение. Поэтому и сделал 2-е кнопки.

Sergey-911 писал(а):
Хотелось бы возвратить свойством "Result"
Не выйдет.
А собственно какая разница? Почему не Text?

Почему не Text - уже ответил, возвращает неправильно. А почему Result - ом не выйдет? Ведь есть же компоненты, которые значение возвращают свойством Value? Почему нельзя вернуть свойством "Result", присвоив ему каким-либо образом атрибут "По-умолчанию"?

Nord777 писал(а):
Еще есть возможность реализовать в твоем компоненте интерфейс C1.Win.C1FlexGrid.IC1EmbeddedEditor.
Тогда возвращать данные будешь через функцию:
Object Browser писал(а):Function C1EditorGetValue() As Object
Member of C1.Win.C1FlexGrid.IC1EmbeddedEditor
Summary:
Gets the current value of the editor.

Return Values:
The current value of the editor (any data type).

С этим попробую разобраться.


-----
P.S. Тема не закрыта уважаемые. Жду Вашей помощи. :cry:
С уважением, Сергей.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

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

Сообщение Nord777 » 11.10.2008 (Сб) 17:58

А почему Result - ом не выйдет? Ведь есть же компоненты, которые значение возвращают свойством Value? Почему нельзя вернуть свойством "Result", присвоив ему каким-либо образом атрибут "По-умолчанию"?
Потому что FlexGrid чихать хотел на атрибуты. Свойство Editor класса CellStyle принимает значения типа System.Windows.Forms.Control. А у него нет свойства Value, но есть Text.
Я посмотрел один из примеров на сайте разработчика. Там все несколько иначе чем у тебя. Советую посмотреть.
http://helpcentral.componentone.com/Samples.aspx
Пример находится на вкладке FlexGrid for .NET.
Название примера - CustomEditor

Там же и большая справочная система наподобие MSDN/
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

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

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

Сообщение sergey-911 » 13.10.2008 (Пн) 18:56

Спасибо Nord777.
Пример смотрел, разочаровался. Решил оставить компоненты, как есть. Пусть пользователи жмут на галочку...

Интересно, можно ли реализовать фильтр на базе стандартного грида DataGridView, позволит ли он в конкретную ячейку поместить компонент для ввода значений, или для этих целей обязательно пользоваться коммерческими гридами?
С уважением, Сергей.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

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

Сообщение Nord777 » 14.10.2008 (Вт) 8:10

позволит ли он в конкретную ячейку поместить компонент для ввода значений
Позволит.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

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

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

Сообщение sergey-911 » 16.10.2008 (Чт) 12:54

Nord777, спасибо за помощь.
Nord777 писал(а):
позволит ли он в конкретную ячейку поместить компонент для ввода значений
Позволит.


Плиз, разъясни, как? Есть примеры в MSDN, НО компонент помещается не в ячейку, а присваивается целой колонке. В моем случае такой вариант не пройдет, т.к. в колонке может быть несколько разных компонентов, в т.ч. и собственных.
Как в разные ячейки одной колонки DataGridView во время выполнения программы поместить свои компоненты? Плиз, пришли подобный пример (с парой компонентов в одной колонке), не сочти за наглость. Компоненты представлены в топике, выше. Буду очень признателен. Извини за беспокойство.
С уважением, Сергей.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

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

Сообщение Nord777 » 17.10.2008 (Пт) 11:05

Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


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

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

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

    TopList