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


Автор: IvanProg 30.3.2008, 08:06
Ребята привет.
Как реализовать так называемые "липкие окна" на C#? Т.е. чтобы диалоговое окно "прилипало" к главному окну, если первое находится в заданной области от второго.

Автор: VisualProgrammerNET 30.3.2008, 10:18
Ну вот накидал тут простейший примерчик того, как форма два прилипает к форме один справа:
(пример сырой, но показательный =)

Form1:
Код

namespace Vingrad1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.f2 = new Form2(this);
            f2.Show();
        }
        Form2 f2 = null;        
    }
}


Form2:
Код

namespace Vingrad1
{
    public partial class Form2 : Form
    {
        public Form2(Form1 f1)
        {
            InitializeComponent();
            this.f1 = f1;
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        Form1 f1 = null;

        private void Form2_Move(object sender, EventArgs e)
        {
            if (this.Location.X > f1.Location.X + f1.Width - 50 && this.Location.X <= f1.Location.X + f1.Width + 50 && (this.Location.Y > f1.Location.Y - 10 && this.Location.Y < f1.Location.Y + f1.Height + 10))
            {
                this.SetBounds(f1.Location.X + f1.Width, this.Location.Y, this.Width, this.Height);
            }
        }
                
    }
}

В этом примере форму два так же можно двигать по оси Y и она при этом останется прилепленной к форме 1.

Если заменить всего один параметр в SetBounds()...
Код

this.SetBounds(f1.Location.X + f1.Width, f1.Location.Y, this.Width, this.Height);

... то форма два закрепится в правой верхней точки формы один.

Минус в том, что при перемещении формы два, когда она прилеплена, то форма два мерзко мигает =) Ну тут уже надо химичить более глубоко  smile 

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