Re[14]: MultiView живет!
От: Al-Ko  
Дата: 20.09.04 09:37
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Al-Ko, Вы писали:


VD>Замени в своих рассуждениях плоские массивы на вложенные множества и все станет намного понятнее. Пиши так:

VD>
VD>А(Б(Г(), Д(), Ж()), В())
VD>

VD>и все будет понятно. Выкинув буквы ты получишь чистые множетсва.
VD>
VD>(((), (), ()), ())
VD>

VD>к которым можно обращаться по индексам.

VD>Так доступ к Ж будет выглядеть как:

VD>
VD>Views[0][2]
VD>

VD>или:
VD>
VD>Б.Ж
VD>


я не понял о чем ты здесь.
У меня есть вопрос по другому примеру:

Но вот в этом примере вообще нельзя однозначно расставить индексы для Б, В и Г:

+-------------------+---------------+-------------------+
|                   |      Б        |                   |
|                   +---------------+                   +
|        A          |      В        |        Д          |
|                   +---------------+                   +
|                   |      Г        |                   |
+-------------------+---------------+-------------------+



Вот допустим, ты прикладник, получивший в наследство такой грид, и тебе надо обратиться к Вью Г.
Ты можешь сказать, что Г имеет индекс [1,2]. А я тебе могу сказать, что Г имеет индекс [0,1,2] или [1,0,2], в зависимости от порядка добавления View. Или даже [1,1,1]. А ведь порядка создания View никто не знает. Ну и как быть? Есть неоднозначности.

                            [1]               [2]
+-------------------+---------------+-------------------+
|                   |      Б [1,0]  |                   |
|                   +---------------+                   +
|        A[0]       |      В [1,1]  |        Д [2]      |
|                   +---------------+                   +
|                   |      Г [1,2]  |                   |
+-------------------+---------------+-------------------+




         [0]                       [1]
+-------------------+---------------+-------------------+
|                   |      Б [1,0,0]|                   |
|                   +---------------+                   +
|        A[0]       |      В [1,0,1]|        Д [1,1]    |
|                   +---------------+                   +
|                   |      Г [1,0,2]|                   |
+-------------------+---------------+-------------------+
                          [1,0]                [1,1]



AK>>Я боюсь, как бы не пришлось делать для мульти-View Columns и Rows и Spawn, как это намечено в TableLayoutPanel из FW 2.0.

VD>С вложенным вариантом проблем не будет. Строки нафиг не упали, а отступы можно сделать просто указав их у контролов реализующих вью.

В общем, с иерархическим построением я согласен. Но пока есть неоднозначности в индексации сложных конструкций.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Старый глюк лучше новых двух!
Re[15]: MultiView живет!
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.09.04 21:59
Оценка:
Здравствуйте, Al-Ko, Вы писали:

AK>я не понял о чем ты здесь.


О исходном примере.

AK>У меня есть вопрос по другому примеру:


AK>Но вот в этом примере вообще нельзя однозначно расставить индексы для Б, В и Г:


AK>
AK>+-------------------+---------------+-------------------+
AK>|                   |      Б        |                   |
AK>|                   +---------------+                   +
AK>|        A          |      В        |        Д          |
AK>|                   +---------------+                   +
AK>|                   |      Г        |                   |
AK>+-------------------+---------------+-------------------+
AK>


Чё ж это нельзя? Только сначала нужно все немножко уточнить. Дело в том, что ты упустил из виду подложку (Б, В, Г). Перерисуем твой пример так чтобы все было видно:

+-------------------+------ Б ------+-------------------+
|                   |      В        |                   |
|                   +---------------+                   +
|        A          |      Г        |        Е          |
|                   +---------------+                   +
|                   |      Д        |                   |
+-------------------+---------------+-------------------+

Где Б — это подложка для (И, Г, Д). И спокойно ответим на вопрос.
Запись в виде множеств будет выглядеть так: (А, Б(В, Г, Д), Е).
Индекс, например, для Г будет такой: View[1][1].

AK>Вот допустим, ты прикладник, получивший в наследство такой грид, и тебе надо обратиться к Вью Г.

Г у тебя — это Д у меня. Так что индекст будет View[1][2].

AK>Ты можешь сказать, что Г имеет индекс [1,2].


После уточнения несомненно.

AK> А я тебе могу сказать, что Г имеет индекс [0,1,2] или [1,0,2], в зависимости от порядка добавления View.


Это если в твоей системе. Я как раз против сквозной индексации.

AK> Или даже [1,1,1]. А ведь порядка создания View никто не знает. Ну и как быть? Есть неоднозначности.


Ну, что-то у тебя вообще какой-то рандом попер.

AK>
AK>+-------------------+---------------+-------------------+
AK>|                   |      Б [1,0]  |                   |
AK>|                   +---------------+                   +
AK>|        A[0]       |      В [1,1]  |        Д [2]      |
AK>|                   +---------------+                   +
AK>|                   |      Г [1,2]  |                   |
AK>+-------------------+---------------+-------------------+
AK>


Еще раз настоятельно рекомендую не думать в терминах плоского или многомерного массива. Это вредно для мозгов.

AK>В общем, с иерархическим построением я согласен.


Ну, уже хорошо. Значит появляется единое мнение.

AK>Но пока есть неоднозначности в индексации сложных конструкций.


Дык на то мы тут и общаемся, чтобы вопросы возникали у нас, а не у тех кто будет потом с этим возиться. Я как раз сторонник того, чтобы ставить на первое метсо не простоту разработки, а простоту последующего использования (даже в ущерб потребляемым ресурсам и скорости (в разумных пределах, конечно)).
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: MultiView живет!
От: Al-Ko  
Дата: 21.09.04 08:50
Оценка:
Здравствуйте, VladD2, Вы писали:

Излишнее цетирование удалено — VladD2

AK>>
AK>>+-------------------+---------------+-------------------+
AK>>|                   |      Б [1,0]  |                   |
AK>>|                   +---------------+                   +
AK>>|        A[0]       |      В [1,1]  |        Д [2]      |
AK>>|                   +---------------+                   +
AK>>|                   |      Г [1,2]  |                   |
AK>>+-------------------+---------------+-------------------+
AK>>


VD>Еще раз настоятельно рекомендую не думать в терминах плоского или многомерного массива. Это вредно для мозгов.


я специально оставил цитирование чтобы было понятнее.

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

Показываю:
1) сперва мы создали два вью:

AK>+-----------------------------------+-------------------+
AK>|                                   |                   |
AK>|                                   +                   +
AK>|        A[0]                       |        Б[1]       |
AK>|                                   +                   +
AK>|                                   |                   |
AK>+-----------------------------------+-------------------+


2) потом левый вью разделили на два:
AK>+------------------+----------------+-------------------+
AK>|                  |                |                   |
AK>|                  |                +                   +
AK>|        В[0,0]    |   Г[0,1]       |        Б[1]       |
AK>|                  |                +                   +
AK>|                  |                |                   |
AK>+------------------+----------------+-------------------+


3) потом в средний добавили три:

AK>+------------------+----------------+-------------------+
AK>|                  | Д[0,1,0]       |                   |
AK>|                  +----------------+                   +
AK>|        В[0,0]    | Е[0,1,1]       |        Б[1]       |
AK>|                  +----------------+                   +
AK>|                  | Ж[0,1,2]      |                   |
AK>+------------------+----------------+-------------------+


вот теперь у данного View индекс [0,1,2]. А если в пункте 2 добавлять новые в правый вью, то индекс нашего элемента будет [1,0,2]. А если еще учитывать, что в средний вью может добавляться не сразу три, а два вью, и потом один из них включит в себя два, то индекс будет вообще [1,1,1]. Короче, внешний вид один и тот же, а индекс может быть абсолютно разным. Вот только это мне и не нравится в данном подходе. А как с этим бороться — не представляю. Остается только при помощи строк, колонок и объединений?
AK>>Но пока есть неоднозначности в индексации сложных конструкций.
VD>Дык на то мы тут и общаемся, чтобы вопросы возникали у нас, а не у тех кто будет потом с этим возиться. Я как раз сторонник того, чтобы ставить на первое метсо не простоту разработки, а простоту последующего использования (даже в ущерб потребляемым ресурсам и скорости (в разумных пределах, конечно)).
Я тоже.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Старый глюк лучше новых двух!
Re[17]: MultiView живет!
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.09.04 14:37
Оценка:
Здравствуйте, Al-Ko, Вы писали:

Цетируй, плиз, только тот текст на который отвечаешь.
Если кому-то будет нужно посмотрит предыдущее сообщение.

У нус тут форум высокой культуры флэйма.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: MultiView живет!
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.09.04 18:21
Оценка:
Здравствуйте, Al-Ko, Вы писали:

AK>я специально оставил цитирование чтобы было понятнее.


Не надо так делать. Я с успехом могу залесть на сообщение выше.

AK>Я считаю, что далеко не так все однозначно в этом примере. И этот, как ты говоришь, рандом может возникнуть в зависимости от порядка добавления вью.


Еще раз прошу не использовать натацию многомерного массива, а использовать натацию вложенных множеств. Тогда пробем с пониманием будет меньше.

AK>вот теперь у данного View индекс [0,1,2]. А если в пункте 2 добавлять новые в правый вью, то индекс нашего элемента будет [1,0,2]. А если еще учитывать, что в средний вью может добавляться не сразу три, а два вью, и потом один из них включит в себя два, то индекс будет вообще [1,1,1]. Короче, внешний вид один и тот же, а индекс может быть абсолютно разным. Вот только это мне и не нравится в данном подходе. А как с этим бороться — не представляю. Остается только при помощи строк, колонок и объединений?


Т.е. тебя смущает, что одного внешнего вида можно будет добиться разными путями? Дык не стоит этого бояться. Главнео чтобы не путался программист. К тому же хотя они будут эквавалентны по внешнему виду, по функциональности они будут различаться. Ведь при масштабировании они будут вести себя по разнмоу. Одна из панелей ведь обязана быть выровнена влево/вправо, а другая заполнять все оставшееся пространство. И вложенные элементы так же будут вести себя по разному в зависимости от того куда они вложены.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: MultiView живет!
От: Al-Ko  
Дата: 21.09.04 19:16
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Еще раз прошу не использовать натацию многомерного массива, а использовать натацию вложенных множеств. Тогда пробем с пониманием будет меньше.

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

Ну да это в конце концов его проблемы. Ведь он может и номер строки в гриде неправильно задать.

Ладно, надо делать, там посмотрим, что из этого выйдет.

Нужно ли новый интерфейс добавлять — IViewContainer? Его должны реализовывать как ВГ, так и GridView.
Старый глюк лучше новых двух!
Re[19]: MultiView живет!
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.09.04 20:29
Оценка:
Здравствуйте, Al-Ko, Вы писали:

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


Согласись, проблем с плоским списком у него будет намного больше.

AK>Ну да это в конце концов его проблемы. Ведь он может и номер строки в гриде неправильно задать.


Как говорится бывает на разные буквы авфафита. Даже на Ё.

AK>Ладно, надо делать, там посмотрим, что из этого выйдет.


Вот это верно!

AK>Нужно ли новый интерфейс добавлять — IViewContainer? Его должны реализовывать как ВГ, так и GridView.


Нет не нужно. Нужно использвать CollectionBase и делать на его основе типизированную коллекцию. Или использовать IList. Если мы переходим на второй фрэймворк, то IList<T>. Кстати, мы таки переходим? Вроде речь шла об этом, и о переходе на SVN...
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: MultiView живет!
От: HotDog Швейцария www.denebspace.com
Дата: 22.09.04 07:07
Оценка:
Здравствуйте, Al-Ko, Вы писали:

VD>>Еще раз прошу не использовать натацию многомерного массива, а использовать натацию вложенных множеств. Тогда пробем с пониманием будет меньше.

AK>У меня нет проблемы с пониманием иерархического представления нескольких вью
AK>Проблема будет у прикладника, который неправильно задаст индекс интересующего его вью из-за того, что этот индекс может трактоваться по-разному.

Как прикладник могу сообщить, что на мой взгляд вложенные множества гораздо удобнее для понимания и программирования. В этом вопросе я полностью поддерживаю Влада.
Re[20]: MultiView живет!
От: Al-Ko  
Дата: 22.09.04 08:04
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Согласись, проблем с плоским списком у него будет намного больше.

мы уже это проехали, можно не возвращаться.

Кстати, как это в коде будет выглядеть?

myGrid.Views[1].Views[0].Views[2].Add(new GridView(...));


а то ты как-то написал:

VD>grid.Views[0][1][2]


но это jagged array, или где ?


Может, я действительно чего-то не понимаю

AK>>Нужно ли новый интерфейс добавлять — IViewContainer? Его должны реализовывать как ВГ, так и GridView.

VD>Нет не нужно.
Ну я его хотел ввести для вспомогательных методов, типа Split, работа со сплиттерами и т.д.

VD>Нужно использвать CollectionBase и делать на его основе типизированную коллекцию. Или использовать IList. Если мы переходим на второй фрэймворк, то IList<T>. Кстати, мы таки переходим? Вроде речь шла об этом, и о переходе на SVN...

Так тут все от тебе зависеть. Я бы перешел и туда, и туда. Люблю новшества
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Старый глюк лучше новых двух!
Re[21]: MultiView живет!
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.09.04 03:04
Оценка:
Здравствуйте, Al-Ko, Вы писали:

AK>Кстати, как это в коде будет выглядеть?


AK>
AK>myGrid.Views[1].Views[0].Views[2].Add(new GridView(...));
AK>


Да, по идее так.

AK>а то ты как-то написал:


AK>
VD>>grid.Views[0][1][2]
AK>


AK>но это jagged array, или где ?


Это я не подумал. Хотя если совместить вью и коллекцию в одном флаконе... но это не очень верное архитектурное решение. К тому же не так часто и много прийдется с этими вью возиться.

AK>Может, я действительно чего-то не понимаю


Да вроде все понял.

AK>Ну я его хотел ввести для вспомогательных методов, типа Split, работа со сплиттерами и т.д.


А зачем тогда IViewContainer? Это нужно прямо у вью и делать.

AK>Так тут все от тебе зависеть. Я бы перешел и туда, и туда. Люблю новшества


Ну, тогда ты все доведи до более менее нормального промежуточного состояния, отрапортуй мне и я переведу все сразу и на второй дотнет, и под свина.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: MultiView живет!
От: Al-Ko  
Дата: 23.09.04 10:37
Оценка:
Здравствуйте, VladD2, Вы писали:

AK>>Ну я его хотел ввести для вспомогательных методов, типа Split, работа со сплиттерами и т.д.

VD>А зачем тогда IViewContainer? Это нужно прямо у вью и делать.

1) для правильной объектной декомпозиции. Потому что особенности View как контейнера других View являются отдельной, так сказать, темой для разговора. Точно так же, как его особенность осуществлять скроллинг или обработку ввода.

2) VirtualGrid тоже является контейнером View, но не является View. Самое лучшее — реализовать общий интерфейс IViewContainer.

В этот интерфейс будет вынесена свойством коллекция Views и (как ты подметил ) синтаксический сахар в виде методов типа Split, Merge и т.д. По-моему, все логично

VD>Ну, тогда ты все доведи до более менее нормального промежуточного состояния, отрапортуй мне и я переведу все сразу и на второй дотнет, и под свина.

k
я уже, кстати, пробовал его переводить под Express 2005. Проект компилируется и даже работает!
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Старый глюк лучше новых двух!
Re[23]: MultiView живет!
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.09.04 16:40
Оценка:
Здравствуйте, Al-Ko, Вы писали:

AK>В этот интерфейс будет вынесена свойством коллекция Views и (как ты подметил ) синтаксический сахар в виде методов типа Split, Merge и т.д. По-моему, все логично


Не логично. Не следует мешать функциональность коллекции и хранимых в ней типов. Это чревато проблемами. Я тут как-то допустил такую ошибку, и потом очень долго мучался. В итоге зарефакторил все и разделил коллекцию и хнанимые в ней итпы.

Коллекция должна содержать методы монипуляции со множествами (в ней хранящимися). Но она не должна по совместительству еще быть контейнером и т.п. Ее задачи хранить псписок.

AK>я уже, кстати, пробовал его переводить под Express 2005. Проект компилируется и даже работает!


А с чего бы ему не работать то? Это уж нужно очень сильно нашорудить...
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: MultiView живет!
От: Al-Ko  
Дата: 27.09.04 09:38
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Не логично. Не следует мешать функциональность коллекции и хранимых в ней типов. Это чревато проблемами. Я тут как-то допустил такую ошибку, и потом очень долго мучался. В итоге зарефакторил все и разделил коллекцию и хнанимые в ней итпы.

Может ты не понял?

Я хочу сделать так:

public interface IViewContainer
{
    ViewCollection Views {get;}
    void Split(...);
    void Merge(..);
}


и потом

public abstract class VirtualGridBase: 
        System.ComponentModel.Component,
        IVirtualGrid, IViewContainer
{
...


и

public class GridView: IGridView, IViewContainer
{
...


ведь у нас же коллекция сейчас выглядит так:

public class ViewCollection:IList
    {
            
        ArrayList _innerArray;
        IVirtualGrid _owner;

        public ViewCollection(IVirtualGrid owner)
        {
            _innerArray = new ArrayList();
            _owner = owner;

        }
        ......


а будет так:

public class ViewCollection:IList
    {
            
        ArrayList _innerArray;
        IViewContainer _owner;

        public ViewCollection(IViewContainer owner)
        {
            _innerArray = new ArrayList();
            _owner = owner;

        }
        ......


VD>Коллекция должна содержать методы монипуляции со множествами (в ней хранящимися). Но она не должна по совместительству еще быть контейнером и т.п. Ее задачи хранить псписок.

коллекцию мы не трогаем, а просто приводим вью и ВГ к одному интерфейсу как к сущности, управляющими вложенными вью.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Старый глюк лучше новых двух!
Re[25]: MultiView живет!
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.09.04 11:37
Оценка:
Здравствуйте, Al-Ko, Вы писали:


AK>Я хочу сделать так:


AK>
AK>public interface IViewContainer
AK>{
AK>    ViewCollection Views {get;}
AK>    void Split(...);
AK>    void Merge(..);
AK>}
AK>


AK>и потом


AK>
AK>public abstract class VirtualGridBase: 
AK>        System.ComponentModel.Component,
AK>        IVirtualGrid, IViewContainer
AK>{
AK>...
AK>


Тогда Container не очень хорошо подобранный термин. Да и вообще не ясно почему просто не поместить все эти методы в IGridView?


AK>ведь у нас же коллекция сейчас выглядит так:


AK> ......


AK>[/c#]


AK>а будет так:


AK>
AK>public class ViewCollection:IList
AK>    {
            
AK>        ArrayList _innerArray;
AK>        IViewContainer _owner;

AK>        public ViewCollection(IViewContainer owner)
AK>        {
AK>            _innerArray = new ArrayList();
AK>            _owner = owner;

AK>        }
AK>        ......

AK>


AK>коллекцию мы не трогаем, а просто приводим вью и ВГ к одному интерфейсу как к сущности, управляющими вложенными вью.


Перечисли полный список методов которые ты планируешь включить в IGridView и IViewContainer.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: MultiView живет!
От: Al-Ko  
Дата: 27.09.04 12:19
Оценка:
Здравствуйте, VladD2, Вы писали:



VD>Тогда Container не очень хорошо подобранный термин. Да и вообще не ясно почему просто не поместить все эти методы в IGridView?


Потому что VirtualGridBase тоже может создавать вью! А ВГ не реализует IGridView.


VD>Перечисли полный список методов которые ты планируешь включить в IGridView и IViewContainer.


Пока только то, что я уже написал:

AK>public interface IViewContainer
AK>{
AK>    ViewCollection Views {get;}
AK>    void Split(...);
AK>    void Merge(..);
AK>}


Вообще, если ты помнишь, система сейчас такая:
ВГ содержит коллекцию Вью из элементов типа GridView. При добавлении нового Вью метод Add коллекции обращается к интерфейсу IViewManager. Этот интерфейс реализуется ПАЛ-контролом, который и создает физический Вью (Win32View). Этот физический вью сопоставляется с "виртуальным" GridView, который находится в коллекции.

А теперь, учитывая вложенность GridView, будет происходить все примерно также, но GridView, поскольку сам содержит вложенные вью, будет реализовывать интерфейс IViewContainer, а физический вью, равно как и ПАЛ-контрол, должен реализовывать IViewManager.

Таким образом, управление вью на виртуальном уровне осуществляется ВГ и GridView через интерфейс IViewContainer, а на физическом уровне им занимаются ПАЛ-контрол и зависимый от платформы вью через IViewManager
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Старый глюк лучше новых двух!
Re[22]: MultiView живет!
От: Al-Ko  
Дата: 01.10.04 13:38
Оценка:
Здравствуйте, VladD2, Вы писали:

AK>>Кстати, как это в коде будет выглядеть?


AK>>
AK>>myGrid.Views[1].Views[0].Views[2].Add(new GridView(...));
AK>>

VD>Да, по идее так.

получается, GridView тоже нужно делать компонентом, чтобы сериализация в код нормально проходила?
Тогда в коде формы получается примерно такая картина:

// 
            // _simpleGrid
            // 
            this._simpleGrid.Views.AddRange(new RSDN.VirtualGrid.GridView[] {
                                                                                this.gridView1,
                                                                                this.gridView2});
            // 
            // gridView1
            // 
            this.gridView1.BackColor = System.Drawing.SystemColors.ControlDark;
            this.gridView1.Location = new System.Drawing.Point(0, 0);
            this.gridView1.Size = new System.Drawing.Size(200, 200);
            // 
            // gridView2
            // 
            this.gridView2.BackColor = System.Drawing.SystemColors.ControlDark;
            this.gridView2.Location = new System.Drawing.Point(0, 0);
            this.gridView2.Size = new System.Drawing.Size(200, 200);
            this.gridView2.Views.AddRange(new RSDN.VirtualGrid.GridView[] {
                                                                              this.gridView3,
                                                                              this.gridView4});
            // 
            // gridView3
            // 
            this.gridView3.BackColor = System.Drawing.SystemColors.ControlDark;
            this.gridView3.Location = new System.Drawing.Point(0, 0);
            this.gridView3.Size = new System.Drawing.Size(200, 200);
            // 
            // gridView4
            // 
            this.gridView4.BackColor = System.Drawing.SystemColors.ControlDark;
            this.gridView4.Location = new System.Drawing.Point(0, 0);
            this.gridView4.Size = new System.Drawing.Size(200, 200);


Это в ВГ добавлено два вью, а потом во второй из них — еще два.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Старый глюк лучше новых двух!
Re[23]: MultiView живет!
От: Al-Ko  
Дата: 01.10.04 13:45
Оценка:
Здравствуйте, Al-Ko, Вы писали:

AK>получается, GridView тоже нужно делать компонентом, чтобы сериализация в код нормально проходила?


Я кстати, могу сделать и сериализацию в одну строку, чисто по иерархии, и не делать вью компонентом, но тогда у GridViews дочерние Views будут содержаться не в коллекции, а в массиве. Ну и соответственно траблы, с этим связанные. Нужно тогда будет добавить в методы вью такие методы, как Remove и Add (именно вью, т.к. дочерней коллекции нет, есть только массив).

Но вариант с компонентами мне лично больше нравится.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Старый глюк лучше новых двух!
Re[23]: MultiView живет!
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.10.04 17:40
Оценка:
Здравствуйте, Al-Ko, Вы писали:

AK>получается, GridView тоже нужно делать компонентом, чтобы сериализация в код нормально проходила?


Вовсе не обязательно. Достаточно создать тайп-конвертор возвращающий TypeDescriptor.

AK>Тогда в коде формы получается примерно такая картина:...


Несовсем. Для Вьюх отдельные переменны ненужны. Они могут создаваться прямо при добавлении, а их состояние можно передавать через параметры конструктора.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: MultiView живет!
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.10.04 17:40
Оценка:
Здравствуйте, Al-Ko, Вы писали:

AK>Здравствуйте, Al-Ko, Вы писали:


AK>>получается, GridView тоже нужно делать компонентом, чтобы сериализация в код нормально проходила?


AK>Я кстати, могу сделать и сериализацию в одну строку, чисто по иерархии, и не делать вью компонентом, но тогда у GridViews дочерние Views будут содержаться не в коллекции, а в массиве. Ну и соответственно траблы, с этим связанные. Нужно тогда будет добавить в методы вью такие методы, как Remove и Add (именно вью, т.к. дочерней коллекции нет, есть только массив).


AK>Но вариант с компонентами мне лично больше нравится.


Ты прочти эту http://gzip.rsdn.ru/article/dotnet/dotnetcontrols.xml
Автор(ы): Владислав Чистяков
Дата: 09.05.2003
Создание ПО из компонентов подразумевает, что компоненты будут добавляться к проекту во время разработки. При этом будет производиться их начальная настройка. Компоненты как таковые не подразумевают (вернее сказать, не обязаны иметь) пользовательского интерфейса (ни для программиста, ни для конечного пользователя). В этом качестве выступают части IDE и дополнительные программные дизайнеры. Первой компонентной средой был продукт, купленный Microsoft на заре своего существования. Впоследствии на его базе родился VB. Далее была Delphi… в общем, к концу двадцатого века компоненты стали поддерживаться почти везде (даже в Visual C++, хотя он и по сей день не очень-то визуальный).
статью... конкретно раздел "Сериализация простых классов". Там подробно написано, как сделать простые классы сериализуемыми в код. Никаких массивов или компонентов для этого ненужно.
... << RSDN@Home 1.1.4 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: MultiView живет!
От: Al-Ko  
Дата: 05.10.04 13:15
Оценка:
Здравствуйте, VladD2, Вы писали:



VD>Ты прочти эту http://gzip.rsdn.ru/article/dotnet/dotnetcontrols.xml
Автор(ы): Владислав Чистяков
Дата: 09.05.2003
Создание ПО из компонентов подразумевает, что компоненты будут добавляться к проекту во время разработки. При этом будет производиться их начальная настройка. Компоненты как таковые не подразумевают (вернее сказать, не обязаны иметь) пользовательского интерфейса (ни для программиста, ни для конечного пользователя). В этом качестве выступают части IDE и дополнительные программные дизайнеры. Первой компонентной средой был продукт, купленный Microsoft на заре своего существования. Впоследствии на его базе родился VB. Далее была Delphi… в общем, к концу двадцатого века компоненты стали поддерживаться почти везде (даже в Visual C++, хотя он и по сей день не очень-то визуальный).
статью... конкретно раздел "Сериализация простых классов". Там подробно написано, как сделать простые классы сериализуемыми в код. Никаких массивов или компонентов для этого ненужно.

я ее прочел, когда она еще не была написана

VD>Вовсе не обязательно. Достаточно создать тайп-конвертор возвращающий TypeDescriptor.

усе ясно. Но как сериализовать вложенные коллекции?

Ведь сам код, генерируемый при сериализации, должен выглядеть так:

_simpleGrid.Views.AddRange(new GridView[] 
                    {
                                new GridView(new GridView[] 
                                {
                                        new GridView(),
                                        new GridView()
                                }), 
                                new GridView(new GridView[] 
                                {
                                        new GridView(),
                                        new GridView(),
                                        new GridView()
                                })
                    });


Здесь создается у ВГ два дочерних Вью-контейнера, у первого из них создается два окна отображения грида, а у второго — три.

Я специально опустил все другие параметры конструктора GridView. Получается, у GridView для этого случая есть два конструктора:

один:
public GridView(GridView[] views)
{
_views.AddRange(views);
}


и второй пустой, без параметров.

В классе GridView, как и в классе ВГ имеется коллекция Views:


/// <summary>
/// Коллекция дочерних областей вывода грида на экран
/// </summary>
        [Category ("GridView")]
        [DesignerSerializationVisibility(
             DesignerSerializationVisibility.Content)]
        public ViewCollection Views
        {
            get
            {
                return _views;
            }
        }



И, наконец, выдержка из тайпконвертора для GridView:

        public override object ConvertTo(
            ITypeDescriptorContext context, 
            CultureInfo culture, 
            object value, 
            Type destinationType)
        {
            if (destinationType == typeof(InstanceDescriptor))
            {
                    
                GridView view = (GridView) value;
                InstanceDescriptorBuilder idb = 
                    new InstanceDescriptorBuilder(view, typeof(GridView));

                
                if(view.Views.Count > 0)
                {
                    GridView[] arrView = (GridView[])Array.CreateInstance(typeof(GridView), view.Views.Count);
                    view.Views.CopyTo(arrView, 0);
                    idb.Add(arrView, typeof(GridView[]));
                }


Вот при таком раскладе и получается код сериализации, приведенный выше — я ничего другого не смог придумать.

И если ты в прикладном коде захотел создать какие-нибудь дочерние View, пишешь:

GridView myView = new GridView();
GridView anotherView = new GridView();
myGrid.Views.Views[0].Views[1].AddRange(myView, anotherView);


А вообще, если честно, когда я с этим связался, сдается мне, что эта идея с вложенными Вью очень наворочена и сложна. Теперь для каждого вью нужно проверять, если его коллекция Views пуста, то он работает как окно отображения, а если там есть элементы, то он работает как контейнер. Другая обработка отрисовки, другая работа со скроллингом, со вводом и т.д. Объем работы удваивается, а выигрыша немного. Когда оно все существовало в плоском виде, таких проблем не возникало.

Может подумаем, и еще чего-то придумаем? Например со строками, столбцами и объединением, но так, чтобы все вью находились в одной коллекции при ВГ?
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Старый глюк лучше новых двух!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.