c# - 如何在c#winforms中取消停靠和分离停靠在另一个窗体中的窗体
问题描述
我想做的事:
- 有两个单独的表格
- 将第一个表单拖到第二个表单中并将其停靠在第二个表单的面板中。
- 之后,我希望能够将第一个表单从第二个表单中拖出来,让它再次独立存在。
在第二个表单中拖动和停靠第一个表单有效。但我无法从第二个表格中取回表格。当我把它拖出来时,它就消失了。
因为拖放使示例代码比必要的更复杂,所以我将其省略了。相反,我使用了按钮。示例表单有两个按钮和一个面板。当按下按钮一时,表单会将其自身的副本放在面板中。当按下按钮 2 时,副本表单应该被取消停靠并显示为单独的表单。这最后一部分不起作用。相反,副本表格消失了。
我试图做的事情是不可能的,还是我做错了什么?
编辑:从汉斯的评论现在我知道出了什么问题。我更改了下面的代码以使其工作。我在更改的代码行后面添加了注释
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();
}
}
解决方案
正如 Hans Passant 指出的,CopyForm.TopLevel 在 button2_Click 方法中没有设置为 true。添加CopyForm.TopLevel = true;
使表格显示出来!谢谢汉斯!
推荐阅读
- java - 在 Java 中将日期格式从 m/dd/yy 更改为 yyyy/MM/dd
- sql - 将行转移到列 Oracle SQL
- excel - MFA 支持 Excel 访问 API
- jquery - 如何在 Laravel 中使用 AJAX 更新和保存图像?
- unity3d - 如何使用 ml-agent 构建项目?
- azure-cosmosdb - 应用程序如何确定在 azure cosmodb 中何时触发了故障转移?
- android - 如何在 Android 的 FAB 上获取可绘制资源
- yolo - 学习yolo的同时AVG Loss持续存在
- python - Pyspark:扩展 pyspark 数据框,添加缺失的句点
- mongodb - 聚合:MongoDB聚合查询示例