开发者

how to move two windows forms together?

开发者 https://www.devze.com 2023-01-10 09:58 出处:网络
I\'ve main form when I press btn I open new form with showDialog()function, I need to move two forms together when I press on main form, because they share in

I've main form when I press btn I open new form with showDialog() function, I need to move two forms together when I press on main form, because they share in design. how can I move them together either I press on main form and move it or I press on for开发者_JAVA百科m2 and move it? Thx alot for any suggestion.


You could create a separate class to manage the form connections and event handling.

class FormConnector
{
    private Form mMainForm;

    private List<Form> mConnectedForms = new List<Form>();

    private Point mMainLocation;

    public FormConnector(Form mainForm)
    {
        this.mMainForm = mainForm;
        this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
        this.mMainForm.LocationChanged += new EventHandler(MainForm_LocationChanged);
    }

    public void ConnectForm(Form form)
    {
        if (!this.mConnectedForms.Contains(form))
        {
            this.mConnectedForms.Add(form);
        }
    }

    void MainForm_LocationChanged(object sender, EventArgs e)
    {
        Point relativeChange = new Point(this.mMainForm.Location.X - this.mMainLocation.X, this.mMainForm.Location.Y - this.mMainLocation.Y);
        foreach (Form form in this.mConnectedForms)
        {
            form.Location = new Point(form.Location.X + relativeChange.X, form.Location.Y + relativeChange.Y);
        }

        this.mMainLocation = new Point(this.mMainForm.Location.X, this.mMainForm.Location.Y);
    }
}

Now all you have to do is to instantiate a FormConnector and call ConnectForm method with the form you want to connect to.


The main ingredients are the forms' Top, Left, Location, and Width properties. Say you have a reference to both forms, called form1 and form2. You could reposition windows like so:

form2.Location = new Point(form1.Left + form1.Width, form1.Top);

The result is both forms, top aligned, with form2 on the right.

Reference:

http://msdn.microsoft.com/en-us/library/aa984420.aspx

0

精彩评论

暂无评论...
验证码 换一张
取 消