问题如下:做了一个无边框窗体A, A里面有个splitcontainer,这个splitcontainer里面包含一些画的图还有说明,现在要做一个窗体B,把A动态的加进B里,多少个自己可以选择,同时A也要可以实现双击后跟B窗体大小一样,
目前实现了把A加到B里面,但是在B窗体里的A不能双击全屏,而且多个A加到B里的时候只有一个加入的显示A里的图,
各位兄弟,求指导一个思路怎么实现A在B窗体里双击后跟B窗体一样大,还有如何快速有效的把A动态添加到B窗体#(狂汗)
C# new fish 求指导一个解题思路
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- AICodeThunder 2023-10-21 08:58关注
1.使用Panel或Splitter控件:在窗体B中,你可以使用Panel或Splitter控件来动态地添加窗体A。这些控件允许你按照需要添加和移除窗体A的实例。
2.创建窗体A的实例:通过代码动态创建窗体A的实例。你可以使用Form.FromHandle()方法从窗体A的句柄创建一个新的窗体实例。
3.调整窗体A的大小:在窗体A被添加到窗体B之后,你可以通过代码调整窗体A的大小以适应窗体B。例如,你可以获取窗体B的宽度和高度,然后设置窗体A的宽度和高度为同样的值。
4.处理双击事件:在窗体B中,你可以监听窗体A的双击事件。当双击窗体A时,你可以获取窗体B的宽度和高度,然后设置窗体A的宽度和高度为同样的值。
5.多实例处理:如果你想在窗体B中添加多个窗体A的实例,你需要确保每个实例都有自己的空间,并且不会互相干扰。你可以使用Panel或Splitter控件的ControlCollection属性来管理这些实例。
6.绘图和显示:如果窗体A中包含绘图和说明,你需要确保这些内容在窗体B中也能正确显示。你可能需要重写窗体A的OnPaint事件处理程序,以便在窗体B中正确绘制内容。下面是一个简单的示例代码,演示如何动态添加窗体A到窗体B,并处理双击事件:
public partial class FormB : Form { public FormB() { InitializeComponent(); } private void FormB_Load(object sender, EventArgs e) { // 添加FormA到FormB Panel panel = new Panel(); panel.Dock = DockStyle.Fill; panel.Click += Panel_Click; Controls.Add(panel); FormA formA = new FormA(); // 创建FormA实例 formA.MdiParent = this; // 设置MdiParent为FormB formA.FormState = FormWindowState.Maximized; // 最大化显示FormA panel.Controls.Add(formA); // 将FormA添加到Panel中 } private void Panel_Click(object sender, EventArgs e) { // 处理Panel的点击事件,以处理双击FormA的事件 Control control = sender as Control; FormA formA = control.Tag as FormA; // 获取FormA的实例 if (formA != null) { formA.FormState = FormWindowState.Maximized; // 最大化显示FormA } } }
上述是一个简单的示例代码,实际实现可能需要根据你的具体需求进行调整。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
- ¥15 Android studio AVD启动不了
- ¥15 陆空双模式无人机怎么做
- ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
- ¥15 C#中的编译平台的区别影响
- ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
- ¥15 电脑蓝屏logfilessrtsrttrail问题
- ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
- ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
- ¥15 Java+vue部署版本反编译