Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Splitter, как юзать? :)


Автор: Vitalik 4.10.2005, 22:42
Доброго времени суток! smile

Собственно возник вопрос по использованию Splitter'а в Visual Studio .NET...

В Delphi с этим было просто, достаточно было кинуть один компонент с Allign = alLeft (Dock = Left), а другой с Align = alClient (Dock = Fill). После этого кинув Splitter с Allign = alLeft всё уже начинало правильно работать.

Ситуация с .NET по видимому другая... Интуитивно догадаться как им можно нормально пользоваться у меня не получилось... В голову приходит только решение "в лоб" с обработкой событий от Splitter и ручного изменения размеров компонентов, но это, согласитесь, ужасное решение smile

Заранее благодарен за помощь в разрешении этого вопроса smile

Автор: mr.DUDA 5.10.2005, 09:02
Рассказываю на примере двух панелей (Panel), разделённых сплиттером. Предположим, у нас есть форма smile. На форме вначале ничего нету. Итак:

1) Перетягиваем на форму первую панель, и выставляем ей в Properties св-во Dock=Left
2) Перетягиваем на форму сплиттер, отпускаем возле первой панели - он автоматически становится справа от панели
3) Тянем на форму вторую панель, отпускаем её правее сплиттера и выставляем св-во Dock=Fill - панель займет всё оставшееся место.

У обеих панелей можно сделать с BorderStyle=Fixed3D, тогда сплиттер будет видно smile

Автор: Vitalik 5.10.2005, 15:23
Да, действительно работает, но, получается, только с панелями. Обычные контролы так не сработают smile
Спасибо! smile

Автор: Papirus 6.10.2005, 12:14
Цитата(Vitalik @ 5.10.2005, 15:23)
Да, действительно работает, но, получается, только с панелями. Обычные контролы так не сработают smile
Спасибо! smile

С чего такой вывод?

С панелями удобно, если их в свою очередь надо разделить сплиттерами... А так вместо панели попробуйте грид или листвью или...

Автор: Denn 6.10.2005, 15:07
Цитата(Vitalik @ 5.10.2005, 15:23)
Обычные контролы так не сработают

для сплиттеров для контролов контролы помещаются на панели. smile

Автор: Vitalik 6.10.2005, 16:16
Гм... Попробовал на чистом проекте - всё работает и с обычными контролами...

А вот если менять существующий проект, то при установке Dock = Fill для контрола, он всё равно разворачивается на всю форму, игнорируя Splitter и второй контрол (с Dock = Left)...
И только после удаления этого контрола и создания вместо него нового - он начинает нормально стыковаться со Splitter'ом smile

Автор: jfx 23.6.2006, 13:22
А как то эту проблему можно решить? После манипуляций со сплитером и готовыми (не только что созданными) контралами с панели вообще все исчезло smile Т.е. все контралы присутствуют, ошибок нет, координаты/размеры в норме, но в дизайнере их невидно. Может заплаты были какие-то но я пропустил? Студия 2003. 

Автор: ivashkanet 23.6.2006, 13:34
Цитата(jfx @  23.6.2006,  13:22 Найти цитируемый пост)
После манипуляций со сплитером и готовыми (не только что созданными) контралами с панели вообще все исчезло

Скорее всего они ушли на задний план. Попробуй выделить невидимый контрол (через вскладку свойств, вверху можно выбрать...) а потом нажать на панели сверху BringToFront 

Автор: jfx 23.6.2006, 14:13
Не, там какой-то другой прикол. Исчезает запись в коде типа Form.Controls.Add(...);
Т.е. сделал я панель, положил на нее контрол, назначил ему докинг, добавил сплитер, добавил другой контрол... и вот после того как нажимаеш F5 или переключаешся между окнами, последний контрол исчезает. В списке он есть, но вот там где на панель добавляются контролы в коде, код добавления последнего контрола исчезает... Причем если в ручную прописать он его все равно удаляет... Что-то я никак не пойму в чем дело... С этой проблемой сталкивался давным давно, так и не нашел приемлемого решения (перерисовка всей формы с нуля не решение - но только так удавалось добиться чего-то) и в последнее время старался обходится без сплитера из стадрартного набора. Но вот сейчас приспичело и теже проблемы...  

Автор: jfx 23.6.2006, 14:41
Тут вот еще какая непонятность:
Контрол, после того как исчезает из дизайнера, вообще пропадает из поля зрения студии.
Что я имею ввиду
Код

public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Panel panel1;

//...

private void InitializeComponent()
{
// ...
// 
// grpSearch
// 
this.grpSearch.Controls.Add(this.panel1);
// ...
}
}


Дык вот, при попытке ввести this.grpSearch.Controls.Add(this. в списке выбора отсутствует panel1. Хотя вот она, чуть выше определена, но нет ее... Что за приколы??? 

Автор: stab 24.6.2006, 12:19
Цитата(jfx @  23.6.2006,  18:41 Найти цитируемый пост)
Дык вот, при попытке ввести this.grpSearch.Controls.Add(this. в списке выбора отсутствует panel1. Хотя вот она, чуть выше определена, но нет ее... Что за приколы??? 


мне в таких случаях помогает Rebuild Project, если и это не помогает, тогда перезапуск студии. 

Автор: Аленка 24.6.2006, 12:20
Почему так получается не подскажу, но знаю как можно сделать, чтобы код не исчезал  smile 
Некоторый код или даже весь, можно перенести из InitializeComponent() в конструктор формы или контрола. Вставить после вызова InitializeComponent(). 

Автор: stab 24.6.2006, 12:25
Цитата(Vitalik @  6.10.2005,  20:16 Найти цитируемый пост)
А вот если менять существующий проект, то при установке Dock = Fill для контрола, он всё равно разворачивается на всю форму, игнорируя Splitter и второй контрол (с Dock = Left)... И только после удаления этого контрола и создания вместо него нового - он начинает нормально стыковаться со Splitter'ом


тут вся фишка в порядке засовывания контролов на родтельский контрол (Controls.Add). порядок можно подправить только редактируя код сгенерированный дизайнером, что ужасно не удобно. сплитер должен добавляться раньше контрола с Dock = Fill.  

Автор: jfx 24.6.2006, 14:43
Ну ладно, это полбеды... но вот почему переменная исчезает из поля видимости студии? Ребилд и перезапуск студии не помогают smile 

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