Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > нужен элемент управления


Автор: Bezonik 3.2.2010, 20:46
Здравствуйте! 
мне необходим совет специалиста, кто знает как я могу реализовать на своем окне программы вот такой компонент, изображенный на рисунке...
user posted image



т.е. необходимо, чтобы справа появлялась примерно такая дополнительная панель с несколькими вкладками, и убиралась, когда ее сворачивает пользователь.... наверняка  вы такие элементы  встречали во многих программах ( к прмиеру в том же Visual Studio)

кто знает о чем идет речь, буду признателен за ваши советы!!!

Автор: Ceiceron 3.2.2010, 21:46
Вообще можно поковыряться в исходных кодах http://www.icsharpcode.net/OpenSource/SD/.
А так создаем юзерский контрол, кладем на него табы, разворачиваем их. После чего настраиваем для всего контрола отлов мышки, что бы при наведении выпрыгивал он в нужный размер ширины. Собственно над функцией изменения размера всего контрола больше всего покорпеть и придется, что бы вычислить все необходимые размеры динамически.

Автор: Bezonik 3.2.2010, 23:27
Ceiceron, спасибо за совет! может подскажешь как настроить TabControl чтобы хоть соответствовала немного рисунку. дело в том что при изменении положения, меняется сама вкладка, текст вкладки исчезает... может уже сталкивался с такой проблемой, знаешь решение?

Автор: Heinzz 3.2.2010, 23:33
поместите на форму SplitContainer
в левую панель контейнера добавьте еще SplitContainer у которого Orientation=Horizontal
добавьте в верхнюю левую панель Button у которого FlatStyle=Flat
добавьте в нижнюю левую панель TabControl у которого Dock=Left  Alignment=Left
добавьте вTabControl необходимые TabPage-ы с картинками из ImageList-а
заполните TabPage-и полями по вкусу 

на кнопку можно повесить splitContainer1.Hide(); - скрывает панельку + ставит на форму кнопочку со стрелочкой чтобы заново открыть панель
все табы возможно лучше заполнять динамически.
Можно получить именно то что Вы хотите

Добавлено через 1 минуту и 40 секунд
Код

private void button1_Click(object sender, EventArgs e)
        {
            splitContainer1.Hide();
            Button b = new Button();
            this.Controls.Add(b);
            b.Click += new EventHandler(b_Click);
        }

        void b_Click(object sender, EventArgs e)
        {
            splitContainer1.Show();
        }

Автор: Ceiceron 4.2.2010, 07:58
Bezonik, 
не помню уж  smile  со стандартными табами уже очень давно не связывался.
Heinzz, 
а тут не будет проблемы того, что выскакивающая панель будет сдвигать все содержимое соседней панели? может стоит просто панель использовать?

Автор: Heinzz 4.2.2010, 10:46
в Visual Studio панель инструментов именно сдвигает код вправо

Автор: Ceiceron 4.2.2010, 12:14
Heinzz, это в том случае если она "пришпилена", а если требуется плавающее состояние?

Автор: Bezonik 4.2.2010, 13:37
Heinzz, спасибо за идею, немного пришлось переделать "под себя", но впринципи дельный совет! спасибо

Автор: Bezonik 4.2.2010, 15:33
и еще один вопрос, как заполнять ImageList из TabControl? и такой вопрос, как отрегулировать скорость появления элемента TabControl ?? чтобы не моментально появлялся а выезжал

Автор: Heinzz 4.2.2010, 20:57
Цитата(Bezonik @  4.2.2010,  15:33 Найти цитируемый пост)
, как заполнять ImageList из TabControl

наоборот : создаем ImageList  и заполняем его значками для кнопок TabControl-a. Там идет пара  ключ - картинка.
указываем источник значков nashTabControl.ImageList = nashImageList;
каждому TabPage назначаем ImageKey - тот ключ что мы указывали в ImageList

Автор: Bezonik 8.2.2010, 20:31
а как же все-таки отрегулировать скорость появления элемента TabControl ??

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)