Модераторы: diadiavova, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в PropertyGrid создавать подкатегори, Как в PropertyGrid программно создавать  
:(
    Опции темы
vovaking
Дата 27.6.2015, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Доброе время суток.
Имеется PropertyGrid
в классе я создал категории и DisplayName.
В него через функцию 
Код

    '**************************память*************************************************************
    Public Function dime()
        Dim objs As Object
        Dim obj As Object
        Dim WMI As Object
        Dim dim_m As String = ""
        Dim dim_mm As String = ""
        Dim memtext As String = ""
        WMI = GetObject("WinMgmts:")
        objs = WMI.InstancesOf("Win32_PhysicalMemory")
        For Each obj In objs
            If obj.FormFactor.ToString = 0 Then
                memtext = "не известен"
            ElseIf obj.FormFactor.ToString = 1 Then
                memtext = "Other"
            ElseIf obj.FormFactor.ToString = 2 Then
                memtext = "SIP"
            ElseIf obj.FormFactor.ToString = 3 Then
                memtext = "DIP"
            ElseIf obj.FormFactor.ToString = 4 Then
                memtext = "ZIP"
            ElseIf obj.FormFactor.ToString = 5 Then
                memtext = "SOJ"
            ElseIf obj.FormFactor.ToString = 6 Then
                memtext = "Proprietary"
            ElseIf obj.FormFactor.ToString = 7 Then
                memtext = "SIMM"
            ElseIf obj.FormFactor.ToString = 8 Then
                memtext = "DIMM"
            ElseIf obj.FormFactor.ToString = 8 Then
                memtext = "DIMM"
            ElseIf obj.FormFactor.ToString = 9 Then
                memtext = "TSOP"
            ElseIf obj.FormFactor.ToString = 10 Then
                memtext = "PGA"
            ElseIf obj.FormFactor.ToString = 11 Then
                memtext = "RIMM"
            ElseIf obj.FormFactor.ToString = 12 Then
                memtext = "SODIMM"
            ElseIf obj.FormFactor.ToString = 13 Then
                memtext = "SRIMM"
            ElseIf obj.FormFactor.ToString = 14 Then
                memtext = "SMD"
            ElseIf obj.FormFactor.ToString = 15 Then
                memtext = "SSMP"
            ElseIf obj.FormFactor.ToString = 16 Then
                memtext = "QFP"
            ElseIf obj.FormFactor.ToString = 17 Then
                memtext = "TQFP"
            ElseIf obj.FormFactor.ToString = 18 Then
                memtext = "SOIC"
            ElseIf obj.FormFactor.ToString = 19 Then
                memtext = "LCC"
            ElseIf obj.FormFactor.ToString = 20 Then
                memtext = "PLCC"
            ElseIf obj.FormFactor.ToString = 21 Then
                memtext = "BGA"
            ElseIf obj.FormFactor.ToString = 22 Then
                memtext = "FPBGA"
            ElseIf obj.FormFactor.ToString = 23 Then
                memtext = "LGA"
            End If
            Dim ret As String = "5"
 
            dim_m = (obj.Manufacturer.ToString) & ":   " & memtext & ":  " & obj.Capacity.ToString / 1024 / 1024 / 1024 & "  ГБ" 'Manufacturer - производитель
            '   dim_mm &= dim_m & ": " & obj.Capacity.ToString & ret 'Chr(9) & Chr(9)
            ' dim_m = obj.Capacity.ToString / 1024 / 1024 / 1024 & "  ГБ"
 
        Next
        Return dim_m
    End Function

Добавляю в категорию сколько памяти, производитель и тип памяти

Код

    <Category("5.Оперативная память"), DisplayName("Память")>
    Public Property s_dim() As String
        Get
            Return b_dim
        End Get
        Set(value As String)
            b_dim = value
        End Set
    End Property


Но вот загвоздка меня одалела, как мне сказать в коде, что у меня может быть больше 1 планки памяти и она создавала дополнительно в эту категорию подкатегорию в которую бы выводила данные если больше 1 планки. 
В textbox у меня получилось через перенос строки выводить сколько вообще у меня планок памяти. А вот в PropertyGrid не как не могу это сделать.

Помогите пожалуйста.
PM MAIL   Вверх
diadiavova
Дата 27.6.2015, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Самый простой способ - сделать тип свойства не строкой а массивом строк. Массив в пропертигриде отображается примерно так как тебе надо. Для более сложных случаев можно использовать 
ExpandableObjectConverter - класс (System.ComponentModel). 
Но это в тех ситуациях, когда свойство представляет из себя сложный объект и надо отобразить его свойства. Также можно собственное поведение задать, но я думаю, что в твоем случае это лишнее. 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vovaking
Дата 27.6.2015, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Цитата(diadiavova @ 27.6.2015,  09:29)
Самый простой способ - сделать тип свойства не строкой а массивом строк. Массив в пропертигриде отображается примерно так как тебе надо. Для более сложных случаев можно использовать 
ExpandableObjectConverter - класс (System.ComponentModel). 
Но это в тех ситуациях, когда свойство представляет из себя сложный объект и надо отобразить его свойства. Также можно собственное поведение задать, но я думаю, что в твоем случае это лишнее.

А как это сделать?
"Самый простой способ - сделать тип свойства не строкой а массивом строк."
PM MAIL   Вверх
diadiavova
Дата 27.6.2015, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vovaking @  27.6.2015,  16:38 Найти цитируемый пост)
А как это сделать?

Ну вот у тебя свойство
Код

    <Category("5.Оперативная память"), DisplayName("Память")>
    Public Property s_dim() As String
        Get
            Return b_dim
        End Get
        Set(value As String)
            b_dim = value
        End Set
    End Property
Объяви тип вместо As String напиши As String(). Переменная, хранящая значение свойства тоже должна быть массивом. Ну и соответственно, когда будешь присваивать значение - тоже имей в виду, что это не строка, а массив строк.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vovaking
Дата 27.6.2015, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Цитата(diadiavova @ 27.6.2015,  16:58)
Цитата(vovaking @  27.6.2015,  16:38 Найти цитируемый пост)
А как это сделать?

Объяви тип вместо As String напиши As String(). 

Получается в ошибка
Исправил тут
Код

Private b_dim As String() ' Память

Тут без изменений
Код

   Public Sub New()
        '**************Память******************************
        b_dim = dime()

    End Sub

Тут исправил с As String  на As String()
Код

    <Category("5.Оперативная память"), DisplayName("Память")>
    Public Property s_dim() As String()
        Get
            Return b_dim
        End Get
        Set(value As String())
            b_dim = value
        End Set

    End Property

дальше без изменений.
Что то я уже совсем запутался :-(

Это сообщение отредактировал(а) vovaking - 27.6.2015, 17:18

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  img_2015_06_27_17_10_03.png 41,06 Kb
PM MAIL   Вверх
diadiavova
Дата 27.6.2015, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vovaking @  27.6.2015,  17:17 Найти цитируемый пост)
Тут без изменений

Ну если у тебя функция как и прежде возвращает строку, то естественно будет ошибка. Ты ведь не можешь переменой-массиву присвоить просто строку. Будет несоответствие типов. Я просто не знаю, какой у тебя получается результат и как ты разделяешь отдельные строки. Если надо каждую строку выводить отдельно, то просто разбей разбей результат с помощью сплита
Код

b_dim = dime().Split(vbNewLine)
Можешь опцию добавить, чтобы пустые строки в результат не попадали.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vovaking
Дата 27.6.2015, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



все равно получается 1 результат 
При этом коде вообще работать отказывается 
Код

Imports System
Imports System.Management
Imports System.Windows.Forms
Imports System.ComponentModel
Public Class clsProperties
  
    Private b_dim As String() ' Память
    Public Sub New()

        b_dim = dime().Split(vbNewLine)


        'MsgBox(b_board)
    End Sub
    <Category("5.Оперативная память"), DisplayName("Память")>
    Public Property s_dim() As String()
        Get
            Return b_dim
        End Get
        Set(value As String())
            b_dim = value
        End Set

    End Property
    '**************************память*************************************************************
    Public Function dime()
        Dim objs As Object
        Dim obj As Object
        Dim WMI As Object
        'Dim dim_m As String
        Dim dim_mm As String()
        Dim memtext As String
        WMI = GetObject("WinMgmts:")
        objs = WMI.InstancesOf("Win32_PhysicalMemory")
        For Each obj In objs
            If obj.FormFactor.ToString = 0 Then
                memtext = "не известен"
            ElseIf obj.FormFactor.ToString = 1 Then
                memtext = "Other"
            ElseIf obj.FormFactor.ToString = 2 Then
                memtext = "SIP"
            ElseIf obj.FormFactor.ToString = 3 Then
                memtext = "DIP"
            ElseIf obj.FormFactor.ToString = 4 Then
                memtext = "ZIP"
            ElseIf obj.FormFactor.ToString = 5 Then
                memtext = "SOJ"
            ElseIf obj.FormFactor.ToString = 6 Then
                memtext = "Proprietary"
            ElseIf obj.FormFactor.ToString = 7 Then
                memtext = "SIMM"
            ElseIf obj.FormFactor.ToString = 8 Then
                memtext = "DIMM"
            ElseIf obj.FormFactor.ToString = 8 Then
                memtext = "DIMM"
            ElseIf obj.FormFactor.ToString = 9 Then
                memtext = "TSOP"
            ElseIf obj.FormFactor.ToString = 10 Then
                memtext = "PGA"
            ElseIf obj.FormFactor.ToString = 11 Then
                memtext = "RIMM"
            ElseIf obj.FormFactor.ToString = 12 Then
                memtext = "SODIMM"
            ElseIf obj.FormFactor.ToString = 13 Then
                memtext = "SRIMM"
            ElseIf obj.FormFactor.ToString = 14 Then
                memtext = "SMD"
            ElseIf obj.FormFactor.ToString = 15 Then
                memtext = "SSMP"
            ElseIf obj.FormFactor.ToString = 16 Then
                memtext = "QFP"
            ElseIf obj.FormFactor.ToString = 17 Then
                memtext = "TQFP"
            ElseIf obj.FormFactor.ToString = 18 Then
                memtext = "SOIC"
            ElseIf obj.FormFactor.ToString = 19 Then
                memtext = "LCC"
            ElseIf obj.FormFactor.ToString = 20 Then
                memtext = "PLCC"
            ElseIf obj.FormFactor.ToString = 21 Then
                memtext = "BGA"
            ElseIf obj.FormFactor.ToString = 22 Then
                memtext = "FPBGA"
            ElseIf obj.FormFactor.ToString = 23 Then
                memtext = "LGA"
            End If
            'dim_m = obj.Capacity.ToString / 1024 / 1024 / 1024
            'obj.Manufacturer.ToString) & ":   " & memtext & ":  " & obj.Capacity.ToString / 1024 / 1024 / 1024 & "  ГБ" & vbCrLf'Manufacturer - производитель
            dim_mm = obj.Capacity.ToString / 1024 / 1024 / 1024 & " ГБ" 'Chr(9) & Chr(9)
            'dim_mm &= dim_m & ": " & obj.Capacity.ToString 'Chr(9) & Chr(9)
            ' dim_m = obj.Capacity.ToString / 1024 / 1024 / 1024 & "  ГБ"

        Next
        Return dim_mm
    End Function

End Class


Это сообщение отредактировал(а) vovaking - 27.6.2015, 17:48

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  img_2015_06_27_17_39_49.png 26,84 Kb
PM MAIL   Вверх
diadiavova
Дата 27.6.2015, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vovaking @  27.6.2015,  17:40 Найти цитируемый пост)
все равно получается 1 результат 

Ну как все равно? У тебя появился раскрывающийся список. Просто ты в него загрузил один результат, вот он один и отображает.

Покажи ту строку, которая показывает несколько результатов и как эти результаты надо разделить, я покажу тебе код, раз уж все надо по полочкам разложить.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vovaking
Дата 27.6.2015, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Цитата(diadiavova @ 27.6.2015,  18:14)
Цитата(vovaking @  27.6.2015,  17:40 Найти цитируемый пост)
все равно получается 1 результат 

Ну как все равно? У тебя появился раскрывающийся список. Просто ты в него загрузил один результат, вот он один и отображает.

Покажи ту строку, которая показывает несколько результатов и как эти результаты надо разделить, я покажу тебе код, раз уж все надо по полочкам разложить.

Вот тут я передаю данные
Код

            dim_mm = (obj.Capacity.ToString) 


тут я создаю категорию с подкатегорией
Код

    <Category("5.Оперативная память"), DisplayName("Память")>
    Public Property s_dim() As String()
        Get
            Return b_dim
        End Get
        Set(value As String())
            b_dim = value
        End Set

    End Property

вот тут переменные 
Код

  
    Private b_dim As String() ' Память


И тут они попадают
Код

    Public Sub New()

        b_dim = dime().Split(vbNewLine)

    End Sub

PM MAIL   Вверх
diadiavova
Дата 27.6.2015, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



vovaking, я ведь не об этом спросил. Какая разница где и что ты передаешь? Мне нужно увидеть ту строку, которая отображается как одна строка, хотя ты хочешь, чтобы она отображалась как несколько. Тогда я смогу написать, что с ней  надо сделать. Зачем ты мне все остальное показываешь, я вообще понять не могу.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vovaking
Дата 27.6.2015, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



Цитата(diadiavova @ 27.6.2015,  23:18)
vovaking, я ведь не об этом спросил. Какая разница где и что ты передаешь? Мне нужно увидеть ту строку, которая отображается как одна строка, хотя ты хочешь, чтобы она отображалась как несколько. Тогда я смогу написать, что с ней  надо сделать. Зачем ты мне все остальное показываешь, я вообще понять не могу.

Вот тут я получаю данные
Код

  Public Function dime()
        Dim objs As Object
        Dim obj As Object
        Dim WMI As Object
        'Dim dim_m As String
        Dim dim_mm As String()
        Dim memtext As String
        WMI = GetObject("WinMgmts:")
        objs = WMI.InstancesOf("Win32_PhysicalMemory")
        For Each obj In objs
dim_mm = (obj.Capacity.ToString)
       Next
        Return dim_mm
    End Function

Здесь я вывожу как в подкатегории
Код

    <Category("5.Оперативная память"), DisplayName("Память")>
    Public Property s_dim() As String()
        Get
            Return b_dim
        End Get
        Set(value As String())
            b_dim = value
        End Set

    End Property


Это сообщение отредактировал(а) vovaking - 27.6.2015, 23:38
PM MAIL   Вверх
diadiavova
Дата 28.6.2015, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



vovaking, еще раз повторяю: мне не нужно знать, где ты что получаешь и куда передаешь. Я объяснил это уже несколько раз, но ты снова пишешь именно это. Причем цитируешь тот самый текст, в котором я это объяснял и снова пишешь то же самое. Какое значение имеет где и что ты получаешь и куда передаешь? Вопрос состоял в том, как в пропертигриде вывести подкатегории, как ты их обозвал. Ты можешь просто показать, что именно ты хочешь выводить? Какую строку. Просто напиши 
Цитата

У меня есть строка "Петя, Вася, Дуня, Катя". Мне надо, чтобы в пропертигриде они выводились не одним пунктом, а каждый отдельно, вот таким вот образом.
Петя
Вася
Дуня
Катя
Все! Это все, что от тебя требуется для решения твоего вопроса.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vovaking
Дата 28.6.2015, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



вот вот так у меня через лебел выводится
Код

Dim objWMIService As Object = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_BaseBoard")
Dim cnt as integer = 0
        For Each objItem In objWMIService
         if objItem.Product <> "" then
             cnt += 1
            Label1.text &= "Планка" & cnt & ": " & objItem.Product & vbcrlf
         End if           
        Next


Добавлено через 5 минут и 23 секунды
Вот категория в которую попадают данные 
Код

    <Category("5.Оперативная память"), DisplayName("Память")>
    Public Property s_dim() As String()
        Get
            Return b_dim
        End Get
        Set(value As String())
            b_dim = value
        End Set
    End Property

Как вы указили выше.
Должно быть     <Category("5.Оперативная память"), DisplayName("Память")>
В этой категории должно выводиться 
Память Kingston:   DIMM  4  ГБ
согласно тому сколько ее установлено на ПК
 (потому что в дальнейшем, я хочу так же выводить и Винты )



Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  img_2015_06_28_00_28_39.png 12,01 Kb
PM MAIL   Вверх
diadiavova
Дата 28.6.2015, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Код

        Dim objWMIService As Object = GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_BaseBoard")
        Dim list = New List(Of String)
        Dim cnt As Integer = 0
        For Each objItem In objWMIService
            If objItem.Product <> "" Then
                cnt += 1
                list.Add("Планка" & cnt & ": " & objItem.Product)
            End If
        Next
        s_dim = list.ToArray



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vovaking
Дата 28.6.2015, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



ошибка

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  img_2015_06_28_00_40_29.png 21,41 Kb
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.