Страница: 1 | 2 |
|
Вопрос: Модификация PropertyGrid
|
Добавлено: 06.11.06 15:49
|
|
Номер ответа: 20 Автор ответа: danser
ICQ: 299287824
Вопросов: 76 Ответов: 209
|
Профиль | | #20
|
Добавлено: 23.11.06 12:37
|
Не отображаются в PropertyGrid составние значения свойства...
Клас Example имеет свойство s типа Base которое я хочу отобразить в PropertyGrid.
Типа при запуске приложения в PropertyGrid возле свойства s - плюсик появляєтся но кликаешь по нему он просто исчезает и свойство "не откривается"
Для свойства s написан конвертор типа ConverterBase редактирующий составние значения этого свойства.
В этом направлении у меня первие шаги, может неправильний конвертор типов которий я взял с книги...
Ниже привожу код загрузки основной форми и код класов Example,Base,BaseConvertor.
...
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim obj As New Example
Me.PropertyGrid1.SelectedObject = obj
End Sub
...
Imports System.ComponentModel
<Serializable()> _
Public Class Example
Private s_ As New Base
< esignerSerializationVisibility(DesignerSerializationVisibility.Content),TypeConverter( GetType(BaseConvert))> _
Public Property S() As Base
Get
S = s_
End Get
Set( ByVal Value As Base)
s_ = Value
End Set
End Property
End Class
Imports System.ComponentModel
Imports System.Windows.Forms
<Serializable()> _
Public Class Base
Protected ID_ As Integer
Protected IsBlocking_ As Boolean
< escription("ID об 'єкта"> _
Public Property ID() As Integer
Get
ID = Me.ID_
End Get
Set( ByVal Value As Integer)
Me.ID_ = Value
End Set
End Property
< escription("Об 'єкт блоковано"> _
Public Property Блокований() As Boolean
Get
Me.Блокований = Me.IsBlocking_
End Get
Set( ByVal Value As Boolean)
Me.IsBlocking_ = Value
End Set
End Property
Overrides Function ToString() As String
Return (" NameProperty)"
End Function
End Class
Public Class BaseConvert
Inherits TypeConverter
Public Overloads Overrides Function GetPropertiesSupported( ByVal context As ITypeDescriptorContext) As Boolean
Return True
End Function
Public Overloads Overrides Function CanConvertFrom( ByVal context As ITypeDescriptorContext, ByVal sourceType As Type) As Boolean
If sourceType.Equals( GetType( String)) = True Then
Return True
Else
MsgBox("sourceType<> String"
End If
End Function
End Class
Ответить
|
Номер ответа: 23 Автор ответа: danser
ICQ: 299287824
Вопросов: 76 Ответов: 209
|
Профиль | | #23
|
Добавлено: 24.11.06 10:16
|
лжете батенька..
Я никогда не лгу...
все открывается.. читай лучше и разбирайся где накосячил.. я делал подобные вещи несколько раз.
Вот мне от нечего делать захотелось позадавать вопросы?
Я ж говорю при запуке плюсик появляется, кликаешь по нему он исчезает... Может глюк студии может я "где накосячил" но так если вы лучше ориентируетесь в этом вопросе то укажите где я "накосясчил"... Студия 2003, код которий писал виложил, сам знаю что должно работать (по логике) но...
Тебя кто учил так Get писать???
Смотри на первой странице этого топика: про свойства кирилицей...это влияет на то что свойство не отображается?
Ответить
|
Номер ответа: 24 Автор ответа: EROS
Вопросов: 58 Ответов: 4255
|
Профиль | | #24
|
Добавлено: 24.11.06 19:49
|
Уважаемый!
Если ВНИМАТЕЛЬНО читали рекомендованную мною книгу, то Вы не могли не заметить тот факт, что для корректного отображения составного свойства достаточно использовать в качестве конвертера типов объект ExpandableObjectConverter. Причем наличие свойств на русском языке не играет абсолютно никакой роли.
Вот примерно так его можно юзать:
Imports System.ComponentModel
''' <summary>
''' Expandable Property Example
''' </summary>
''' <remarks>Add to form PropertyGrid</remarks>
Public Class Form1
Private Sub Form1_Load( ByVal sender As System. Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim Doc As New DocumentHost()
With Doc.Документ
.Название = "Гражданин VBNET"
.Серия = "ХХII"
.Номер = "22566789"
End With
PropertyGrid1.SelectedObject = Doc
End Sub
End Class
Public Class DocumentHost
Private _document As New Document
Public Property Документ() As Document
Get
Return _document
End Get
Set( ByVal Value As Document)
_document = Value
End Set
End Property
End Class
<TypeConverter( GetType(ExpandableObjectConverter))> _
Public Class Document
Private _name As String = String.Empty
Public Property Название() As String
Get
Return _name
End Get
Set( ByVal Value As String)
_name = Value
End Set
End Property
Private _series As String = String.Empty
Public Property Серия() As String
Get
Return _series
End Get
Set( ByVal Value As String)
_series = Value
End Set
End Property
Private _number As String = String.Empty
Public Property Номер() As String
Get
Return _number
End Get
Set( ByVal Value As String)
_number = Value
End Set
End Property
Public Overrides Function ToString() As String
Return ("Документ"
End Function
End Class
Если же Вас интересует непосредственно конвертер типов, то за ... ммм... эээ.. ставишими традиционными на этом форуме, каких нибудь несчастных 20 WMZ я с радостью напишу для Вас полноценный конвертер типов, с поддержкой Default Value, Reset и прочих приятственных фишечек для вашего составного свойства. Либо что, гораздо дешевле, надо 3-5 раз прочитать книгу. Если остануться непонятные вопросы, то надо повторить чтение.. Причем главы, относящиеся к дизайнерам, читать рекомендую особенно внимательно!
Ответить
|
Номер ответа: 25 Автор ответа: danser
ICQ: 299287824
Вопросов: 76 Ответов: 209
|
Профиль | | #25
|
Добавлено: 24.11.06 21:29
|
Причем наличие свойств на русском языке не играет абсолютно никакой роли.
Я так и подумал.Переспросил так как не понял почему Ты спросил...
<TypeConverter(GetType(ExpandableObjectConverter))> _
Вот чего у меня нет...в примере.Это я и хотел узнать.Я книгу только начал читать. Читаю сачас главу про конвертори и редактори... и понемногу паралельно сразу питаюсь пробы(и)вать примеры... вот с одним, с твоей помощь, разобрался, спасибо помог...
...я с радостью напишу для Вас полноценный конвертер типов, с поддержкой Default Value, Reset и прочих приятственных фишечек для вашего составного свойства.
Мне готовое решение не нужно даже если б ты его делал бесплатно...спасибо.Я просто питаюсь разобраться... извини если надоедаю.
Еще раз спасибо.
Ответить
|
Страница: 1 | 2 |
Поиск по форуму