Как отсоединить и отделить форму, которая закреплена в другой форме в c # winforms - PullRequest
1 голос
/ 18 октября 2019

Что я хочу сделать:

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

Перетаскивание и закрепление первой формы во второй форме работает,Но я не могу вернуть форму из второй формы. Когда я перетаскиваю его, он исчезает.

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

То, что я пытаюсь сделать, невозможно, или я делаю что-то не так?

РЕДАКТИРОВАТЬ: из комментария Ганса теперь я знаю, что не так. Я изменил код ниже, чтобы он работал. Я оставил комментарий за строкой кода, которая изменилась

public partial class Form1 : Form
{
    private Form1 CopyForm;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (CopyForm == null)
        {
            CopyForm = new Form1();
            CopyForm.TopLevel = false;
            CopyForm.Parent = panel1;
            CopyForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            CopyForm.Dock = DockStyle.Fill;
            CopyForm.Show();
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        CopyForm.Dock = DockStyle.None;
        CopyForm.Parent = null;

        panel1.Controls.Clear();

        CopyForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
        CopyForm.StartPosition = FormStartPosition.CenterScreen;
        CopyForm.Size = new Size(500, 500);
        CopyForm.TopMost = true;
        CopyForm.TopLevel = true; // <== This line was the fix to my problem
        CopyForm.Show();
    }
}

1 Ответ

0 голосов
/ 18 октября 2019

Как отметил Ханс Пассант, CopyForm.TopLevel не был установлен в true в методе button2_Click. Добавление CopyForm.TopLevel = true; заставило форму появиться! Спасибо Ганс!

...