C#主窗体调用子窗体总结

首先在同一命名空间下添加新建多个窗体,选用一个作为主窗体,其他窗体作为子窗体。
经导师指导,我采用在主窗体加入一个面板,面板中调用三个主窗体的方法,经实践记录如下:
在这里插入图片描述
步骤1:新建项目
主窗体我采用的DevExpress配件,当然直接新建普通的winform窗体也可以
在这里插入图片描述步骤2:在同一个命名空间下添加多个窗体作为子窗体
在这里插入图片描述在这里插入图片描述依次添加完成后,分别将窗体的(Name)属性修改为特定的名称(最好体现出该子窗体的功能,方便之后写程序)

步骤3:在主窗体中定义一个panel控件,用作子窗体的父容器
在这里插入图片描述
步骤4:在主窗体中定义三个子窗体

DigtalHandWritingForm sonForm1 = new DigtalHandWritingForm();
picture_load sonForm2 = new picture_load();
train_model sonForm3 = new train_model();

定义子窗体的父容器为panel1

sonForm1.Parent = this.panel1;
sonForm1.Size = this.panel1.Size;
sonForm2.Parent = this.panel1;
sonForm2.Size = this.panel1.Size;
sonForm3.Parent = this.panel1;
sonForm3.Size = this.panel1.Size;

对子窗体的一些其他操作:

//将当前子窗体设置成非顶级控件
sonForm1.TopLevel = false;
sonForm2.TopLevel = false;
sonForm3.TopLevel = false;
//设置窗体最大化
sonForm1.WindowState = FormWindowState.Maximized;
sonForm2.WindowState = FormWindowState.Maximized;
sonForm3.WindowState = FormWindowState.Maximized;
//去掉窗体边框
sonForm1.FormBorderStyle = FormBorderStyle.None;
sonForm2.FormBorderStyle = FormBorderStyle.None;
sonForm3.FormBorderStyle = FormBorderStyle.None;

步骤5:初始化子窗体的状态,让子窗体全部显示,并设置可见性为隐藏

//初始子窗体全部隐藏
sonForm2.Visible = false;
sonForm3.Visible = false;
sonForm3.Visible = false;
//子窗体全部显示
sonForm1.Show();
sonForm2.Show();
sonForm3.Show();

关于窗体隐藏也可参考如下链接
窗体隐藏:窗体隐藏

步骤6:定义三个按钮,通过按钮的点击事件来实现窗体的切换,这时候窗体的Visible属性显得就很重要了

private void barButtonItem15_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
	sonForm2.Visible = false;
	sonForm3.Visible = false;
	sonForm1.Visible = true;
}
private void barButtonItem17_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
	sonForm1.Visible = false;
	sonForm3.Visible = false;
	sonForm2.Visible = true;
}

private void barButtonItem5_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
	sonForm1.Visible = false;
	sonForm2.Visible = false;
	sonForm3.Visible = true;
}

演示一下程序效果:

c#主窗体添加子窗体演示

C#中,窗体调用窗体的Close事件可以通过几种方式实现,最常见的方法是在窗体中触发一个事件,然后在窗体中监听这个事件,并在事件处理程序中调用窗体的Close方法来关闭窗体。以下是一个简单的示例说明: 首先,在窗体窗体类)中定义一个事件,然后在窗体关闭前触发这个事件: ```csharp public class ChildForm : Form { // 定义一个委托 public delegate void ChildFormClosedEventHandler(); // 定义一个事件 public event ChildFormClosedEventHandler ChildFormClosed; // 当需要关闭窗体时触发事件 protected virtual void OnClose() { ChildFormClosed?.Invoke(); } // 在窗体关闭时触发事件 private void ChildForm_FormClosing(object sender, FormClosingEventArgs e) { OnClose(); } } ``` 然后,在窗体中创建窗体的实例,并为窗体的事件添加事件处理程序。在事件处理程序中,调用窗体的Close方法来关闭窗体: ```csharp public class MainForm : Form { private ChildForm childForm; public MainForm() { childForm = new ChildForm(); // 为窗体的事件添加处理程序 childForm.ChildFormClosed += ChildForm_Closed; } private void ShowChildForm() { childForm.Show(); } // 窗体关闭事件的处理程序 private void ChildForm_Closed() { if (childForm != null && !childForm.IsDisposed) { childForm.Close(); // 确保窗体实例未被释放 } } } ``` 在上述代码中,当窗体需要关闭时,它会触发ChildFormClosed事件,窗体的ChildForm_Closed事件处理程序会被调用,在这里可以执行一些清理操作并关闭窗体
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值