PropertyGrid: вопросы, вопросы, вопросы

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

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

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

PropertyGrid: вопросы, вопросы, вопросы

Сообщение natcap » 17.08.2009 (Пн) 17:44

Мое почтение.

Проблема такая: пишу приложение для создания скинов, использую для отображение свойств PropertyGrid

1. не могу найти статью с примерами на ВБ как и что прописывать в классе для придания нормального вида
нашла одну (http://www.rsdn.ru/article/dotnet/Prope ... .xml#E4SAG) но она для C#
2. не могу разобраться как сделать чтобы в свойстве можно было выбрать файл или цвет

Буду благодарна любым советам и ссылкам :)
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение MIT » 17.08.2009 (Пн) 17:50

Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение Williams » 17.08.2009 (Пн) 18:29

natcap писал(а):пишу приложение для создания скинов


просто интересно, это для себя создаешь?
И вы думаете, что вас оставят в живых после прочтения этого поста?

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение natcap » 17.08.2009 (Пн) 18:42

MIT писал(а):http://www.codeproject.com/KB/vb/using_propertygrid.aspx


Спасибо, сильно упростило, но все равно не понятно, как выбирать не иконку и цвета произвольные а не палитру жесткую, т.е. по сути привешивать полноценный выбор файла и цвета


Williams писал(а):просто интересно, это для себя создаешь?


Для "себя" у меня есть занятия гораздо увлекательнее написания программ :) Просто не получается у меня никогда изучение языка с каких-нибудь простеньких программок начинать.. сразу что-нибудь из разряда "а может я пару раз в горящую избу? да и кони не пойманные скачут.... это прооооще.... "
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение natcap » 19.08.2009 (Ср) 15:19

И тем не менее, неужели никто не разбирался с UITypeEditor? как им присоединить нормальный выбор файла или цвета????
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение MIT » 19.08.2009 (Ср) 15:32

Я пробовал разбираться, но лень оказалась сильнее меня - особого стимула не было.
По поводу UITypeEditor можно довольно много инфы нагуглить, в чем проблема?
Раз
Два
Три
...

natcap писал(а):как им присоединить нормальный выбор файла или цвета????
Чем не устраивает стандартное окошко выбора цвета? Там же можно указать цвет как угодно.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение natcap » 19.08.2009 (Ср) 15:55

За ссылки спасибо, сейчас полистаю твои, но по тому, что нагуглила сама только больше запуталась :shock: огрогмное кол-во закладок, все по UITypeEditor и PropertyGrid - только больше в ступор впадаю.... причем самое ужасное. что все примеры нормальные на C# а я в нем полный дуууууб

MIT писал(а):Чем не устраивает стандартное окошко выбора цвета? Там же можно указать цвет как угодно.


КАК? я нашла только выбор жестко заданных цветов (задание цифирок через запятую - не вариант, люди не знают, что такое RGB и с чем его едят, как преобразовывать одно в другое ит.д.) .. а в идеале мне надо возможность задать цвет в HTML формате, т.е. #000000 - #ffffff
причем окно для выбора цвета лучше то, которое стандартный ColorDialog - пользователи к нему привыкли уже
Последний раз редактировалось natcap 20.08.2009 (Чт) 13:48, всего редактировалось 1 раз.
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

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

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение Nord777 » 19.08.2009 (Ср) 23:43

Код: Выделить всё
Imports System.Drawing.Design
Imports System.ComponentModel
Imports System.Windows.Forms.Design

Public Class Class1
   Inherits Panel

   <Editor(GetType(myColorEditor), GetType(UITypeEditor))> _
   Public Overrides Property BackColor() As Color
      Get
         Return MyBase.BackColor
      End Get
      Set(ByVal value As Color)
         MyBase.BackColor = value
      End Set
   End Property

   '===========================================================
   Public Class myColorEditor
      Inherits UITypeEditor


      Public Overrides Function EditValue(ByVal context As ITypeDescriptorContext, _
                                          ByVal provider As IServiceProvider, _
                                          ByVal value As Object) As Object

         If provider Is Nothing Then Return value
         Dim edSvc As IWindowsFormsEditorService
         edSvc = DirectCast(provider.GetService(GetType(IWindowsFormsEditorService)), IWindowsFormsEditorService)
         If (edSvc Is Nothing) Then Return value

         Dim CD As New ColorDialog
         CD.ShowDialog(edSvc)
         Return CD.Color

      End Function

      Public Overrides Function GetEditStyle(ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle
         Return UITypeEditorEditStyle.DropDown
      End Function

      Public Overrides Function GetPaintValueSupported(ByVal context As ITypeDescriptorContext) As Boolean
         Return True
      End Function

      Public Overrides Sub PaintValue(ByVal e As PaintValueEventArgs)
         If TypeOf e.Value Is Color Then
            Dim color As Color = DirectCast(e.Value, Color)
            Dim brush As New SolidBrush(color)
            e.Graphics.FillRectangle(brush, e.Bounds)
            brush.Dispose()
         End If
      End Sub

   End Class
End Class


И добавь в референсы библиотеку System.Drawing.Design.dll
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

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

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение Admiralisimys » 20.08.2009 (Чт) 13:05

natcap небольшой прототип
Код: Выделить всё
Imports System
Imports System.Drawing
Imports System.Windows.Forms

Public Class PropertyGridSelectedObject
    Dim ColorDialog1 As New ColorDialog
    Private _color As Color
    Public Property Color() As Color
        Get
            Return ColorDialog1.Color
        End Get
        Set(ByVal value As Color)
            ColorDialog1.ShowDialog()
            _color = ColorDialog1.Color
        End Set
    End Property
End Class

Class Form1
    Inherits Form
    Dim PropertyGridSelectedObject1 As New PropertyGridSelectedObject
    Dim PropertyGrid1 As New PropertyGrid()
    Shared Shadows Sub Main()
        Application.Run(New Form1)
    End Sub
    Sub New()
        Text = "Property Grid - Color Dialog Select"
        With PropertyGrid1
            .Parent = Me
            .Location = Point.Empty
            .Size = Me.ClientSize
            .SelectedObject = PropertyGridSelectedObject1
        End With
    End Sub
End Class

По двойному клику по полю редактирования цвета появится требуемый диалог, value не удел и требуется для того что б не писалось сообщение об ошибке. При выборе цвета без названия, а в виде перечисления значений RGB, возможны проблемы с вызовом данного диалога, так как при клике будет предложенно отредактировать текстовое поле. Я так понимаю, для корректного решения нужно найти событие возникающие по стрелки вниз при выборе цвета и переназначить его.
Getting the Most Out of the .NET Framework PropertyGrid Control

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение natcap » 20.08.2009 (Чт) 23:34

Спасибки :)

воспользовалась вариантом Nord777 - как раз именно то, что хотела :)

но возникли еще вопросы:

1. как заставить диалог запоминать добаленные в набор цвета ? ( в 6.0 они как-то сами запоминались)
2. надо чтобы одно из значений раскрывалось, т.е. имело "+" по которому подзначения
Пример на C# выглядел так:
Код: Выделить всё
/// <summary>
/// Данные, входящие в адрес
/// </summary>
[TypeConverter(typeof(ExpandableObjectConverter))]
class AddressData
{
  /// <summary>
  /// Конструктор
  /// </summary>
  public AddressData(string town, string street, uint house)
  {
    _town = town;
    _street = street;
    _house = house;
  }

  private string _town;

  /// <summary>
  /// Город
  /// </summary>
  [DisplayName("Город")]
  [Description("Наименование населенного пункта")]
  public string Town
  {
    get { return _town; }
    set { _town = value; }
  }

  private string _street;

  /// <summary>
  /// Улица
  /// </summary>
  [DisplayName("Улица")]
  [Description("Название улицы")]
  public string Street
  {
    get { return _street; }
    set { _street = value; }
  }

  private uint _house;

  /// <summary>
  /// Номер дома
  /// </summary>
  [DisplayName("Дом")]
  [Description("Номер дома")]
  public uint House
  {
    get { return _house; }
    set { _house = value; }
  }

  /// <summary>
  /// Представление в виде строки
  /// </summary>
  public override string ToString()
  {
    return _town + ", " + _street + " - " + _house;
  }

}


====================================================================
Задавать дополнительные атрибуты для редактируемого свойства не нужно:

[DisplayName("Место жительства")]
[Description("Адрес")]
[Category("3. Дополнительно")]
public AddressData Address
{
   get { return _address; }
   set { _address = value; }
}


Переделываю под свои нужды:

Код: Выделить всё
    <TypeConverter(GetType(ExpandableObjectConverter))> _
    Public Class Space

        Private _left As Integer
        Private _bottom As Integer
        Private _right As Integer
        Private _top As Integer

        Public Sub New(Optional ByVal top As Integer = 0, Optional ByVal left As Integer = 0, Optional ByVal bottom As Integer = 0, Optional ByVal right As Integer = 0)
            _left = left
            _right = right
            _top = top
            _bottom = bottom
        End Sub

        <DisplayName("Левый отступ")> _
        <Description("Установите значение отступа слева")> _
        Public Property left() As Integer
            Get
                Return _left
            End Get
            Set(ByVal value As Integer)
                _left = value
            End Set
        End Property
........
        ''' <summary>
        ''' Представление в виде строки
        ''' </summary>
        Public Overloads Overrides Function ToString() As String
            Return ((((_top & ", ") + _left & ", ") + _bottom & ", ") + _right & ", ")
        End Function
    End Class

====================

        <DisplayName("Внутренний отступ"), _
         Description("Задайте внутренние отступы для оъекта"), _
         Category("Отступы")> _
        Public Property Padding() As Space
            Get
                Return _padding
            End Get
            Set(ByVal value As Space)
                _padding = value
            End Set
        End Property




не дает раскрывающийся пункт...
понмаю что не замечаю чего-то тревиального, но чего именно....
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

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

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение Nord777 » 21.08.2009 (Пт) 0:06

1. как заставить диалог запоминать добаленные в набор цвета ? ( в 6.0 они как-то сами запоминались)
Обьяви переменную
Public CustomColors() As Integer

Далее в теле функции EditValue:
If CustomColors IsNot Nothing Then CD.CustomColors = CustomColors
CD.ShowDialog(edSvc)
CustomColors = CD.CustomColors



2. надо чтобы одно из значений раскрывалось, т.е. имело "+" по которому подзначения
не дает раскрывающийся пункт...
Тебе надо обьявить этот класс как свойство в составе другого обьекта.
А ты видимо пыталась его напрямую засунуть в PropertyGrid :)

Код: Выделить всё
Public Class clsTMP
   Private _Space As New clsSpace(10, 10, 10, 10)

   Public Property Space() As clsSpace
      Get
         Return _Space
      End Get
      Set(ByVal value As clsSpace)
         _Space = value
      End Set
   End Property
End Class


Код: Выделить всё
   Dim obj As New clsTMP

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      PropertyGrid1.SelectedObject = obj
   End Sub
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение natcap » 21.08.2009 (Пт) 3:15

Nord777 писал(а):
Private _Space As New clsSpace(10, 10, 10, 10)



Вот ОНО! не, ну надо так тупить... пол дня провозилась... тьфу на меня в общем :)
СПАСИБО :)

а с первой частью это сохранение выбраного цвета, а вот как добавленные в наборы сохранять? те, что Дополнительный цвета :) Но все это завтра...

Спасибо еще раз! :)
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

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

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение Nord777 » 23.08.2009 (Вс) 12:28

а с первой частью это сохранение выбраного цвета, а вот как добавленные в наборы сохранять? те, что Дополнительный цвета

CustomColors = CD.CustomColors - это оно и есть
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение natcap » 24.08.2009 (Пн) 12:29

Спасибо :)

Еще один вопрос возник: как сделать так, чтобы в зависимости от каких-то параметров часть полей становились неотображаемые или недоступными к изменению?
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

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

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение Nord777 » 24.08.2009 (Пн) 13:16

Я такого не делал, и сомневаюсь, что это возможно.
Хотя...
Если ты видела какой-либо стандартный контрол с таким поведением - назови его. Может что-нибудь придумаем.
Самый простой вариант - проверять в теле свойства(можно ли в данный момент его изменять. Если нет - кидать исключение)
Но это по поводу ReadOnly. Как быть с видимостью - не знаю.

Скорее всего это можно решить при помощи динамической сборки, но это хлопотно. И я это тоже не делал. :)
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: PropertyGrid: вопросы, вопросы, вопросы

Сообщение natcap » 24.08.2009 (Пн) 13:48

хм.. ну и фиг с ним тогда.. решу это с обратной стороны - не буду запоминать запрещенные параметры в результате

Спасибо еще раз :)

Перехожу к следующим объектам :) (Webbrowser, HTML, XML и CSS) :)
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)


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

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

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

    TopList