使用美化方法设计嵌入的子窗体(三)

使用美化方法设计嵌入的子窗体

分析效果图的实现

效果图:
在这里插入图片描述

新建 Windows 窗体

  • 新窗体命名:FrmAddProduct.cs
  • 修改窗体的 Text 属性:新增商品
  • 修改窗体的位置:StartPosition:CenterScreen
  • 窗体的无边框设计:FormBorderStyle:none
  • 修改窗体的大小:Size:1047*640(尽量先设置无边框再设置大小,因为去边框会影响窗体大小)
  • 修改窗体的背景颜色:BackColor:#EEFEFF

处理上半部分

  • 拖拽一个 Label,设置 Text 属性:当前位置:新增商品;Font 属性:微软雅黑;
  • 拖拽一个 Label,删除 Text 属性;AutoSize 属性:false;添加边框 BorderStyle 属性:Fixed3D;设置大小 Size:1047*1
  • 保存到数据库按钮
  • 关闭窗口按钮

基本信息

其他常见控件的使用自行设计,这里直接跳过了。

下拉列表框有两种实现方式:ListView 和 Combobox

请从分类列表中选择:ListView

  • 复制一个上面制作好的按钮,修改 Text:请从分类列表中选择;修改背景颜色 BackColor:#0099DC;
  • 点击按钮出现下拉列表:拖拽一个 Panel 调整大小放到按钮的下面
  • 再拖拽一个 ListView(其实一个它也行,但有时候想再放些其他内容,所以上面拖拽了个容器 Panel)放到 Panel 上;调整 Dock 属性:fill;

ps:Panel 如果有一部分超出 GroupBox 被裁剪切割掉的话怎么处理:
单独把 Panel(包含 ListView)放到 GroupBox 外面,不让它成为 GroupBox 的子控件;然后把 GroupBox 先移到其它地方。这个时候,把 Panel(包含 ListView) 放到刚才想放到的地方,再把 GroupBox 移回去。这个时候会发现,Panel(包含 ListView) 被 GroupBox 盖住了,右键选择 GroupBox:置为底层 就可以了。

下拉列表框:Combobox

  • 拖拽一个 ComboBox 控件,修改 DropDownStyle 属性:DropDownList(这个只能选择不能输入,DropDown 既能输入又能下拉选择);FlatStyle:Flat;设置背景色 BackColor:#00AEC2(如果设置完之后可能只显示一圈的背景色,像边框一样,没关系,运行的时候就好了。或者切换下 DropDownStyle 属性 也能正常显示背景色了);

其他窗口布局自行实现。

ListView 具体实现

先选中 ListView 的 Panel 控件,修改 Visible 属性:False;先隐藏 Panel,通过点击按钮控制显示和隐藏。

添加标题:

  • 点击右上角的箭头,点击编辑列
    在这里插入图片描述

    在这里插入图片描述

  • 此时 ListView 中还是一片空白,不能显示这些标题,在视图这里选择 Details
    在这里插入图片描述

  • 显示网格;此时,表格只是一片空白,可以在属性面板中设置,显示网格,如下图
    在这里插入图片描述

  • 点击右上角的箭头,点击编辑项
    在这里插入图片描述

    在这里插入图片描述

  • 或者代码添加数据到表格中(项)

    private void Button_Test_Click(object sender, EventArgs e)
    {//数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度listView1.BeginUpdate();//添加5行数据for (int i = 0; i < 5; i++)   {ListViewItem lvitem = new ListViewItem();lvitem.SubItems[0].Text = i.ToString();lvitem.SubItems.Add("姓名"+i.ToString());lvitem.SubItems.Add("年龄" + i.ToString());lvitem.SubItems.Add("地址" + i.ToString());lvitem.SubItems.Add("生日-" + i.ToString());listView1.Items.Add(lvitem);}//结束数据处理,UI界面一次性绘制。listView1.EndUpdate(); 
    }
    

代码实现选择内容赋值到 TextBox 上:

// 关闭窗口
private void btnClose_Click(object sender, EventArgs e)
{this.Close();   
}// 请从分类列表中选择
private void BtnSelectKind_Click(object sender, EventArgs e)
{if (this.panelSelectKind.Visible){this.panelSelectKind.Hide();}else{this.panelSelectKind.Show();}
}// ListView 选择的索引发生改变
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{// 在此处设断点,发现点击不同的Item后,此事件居然执行了2次 // 第一次是取消当前Item选中状态,导致整个ListView的SelectedIndices变为0// 第二次才将新选中的Item设置为选中状态,SelectedIndices变为1// 如果不加listview.SelectedIndices.Count>0判断,将导致获取listview.Items[]索引超界的异常if (this.listView1.SelectedIndices != null && this.listView1.SelectedIndices.Count > 0){// 获取第一列的内容this.tbKind.Text = this.listView1.Items[this.listView1.SelectedIndices[0]].Text;// 获取第一列子项的内容// this.tbKind.Text = this.listView1.Items[this.listView1.SelectedIndices[0]].SubItems[2].Text;this.panelSelectKind.Hide();}
}
// ListView 点击了列
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
{// 点击列标题是可以获取列号Console.WriteLine(e.Column);
}

comboBox 具体实现

  • MaxDropDownltems:在下拉列表中显示的最多项数(超出的将滚动显示)。默认设置无效,还是拉长了 comboxBox 的高度,全部显示了。是因为 IntegralHeight 属性(指示组合框是否应调整大小以避免显示部分项)的默认值是 true,改为 False 即可。
  • 通过 Items 属性来给 comboBox 设置下拉内容

嵌入子窗体的实现

public partial class FrmMain : Form
{public FrmMain(){InitializeComponent();}private void brnClose_Click(object sender, EventArgs e){this.Close();}#region 关闭已有窗体,嵌入新的窗体// 关闭已有窗体private void CloseForm(){// 首先判断当前容器中是否已经存在窗体foreach (Control item in this.splitContainer1.Panel2.Controls){if (item is Form){Form form = (Form)item;form.Close();}}}// 添加新的窗体private void addNewForm(Form form){// 将子窗体设置成非顶级窗体form.TopLevel = false;// 让子窗体最大化显示form.WindowState = FormWindowState.Maximized;// 或者设置填充模式(跟上面功能一样)// form.Dock = DockStyle.Fill// 设置窗体的边框为:None(去掉窗体的边框)form.FormBorderStyle = FormBorderStyle.None;// 设置窗体的父容器(指定子窗体显示的容器)form.Parent = this.splitContainer1.Panel2;form.Show(); // add.Close();}#endregion// 打开新增商品子窗体private void btnAddproduct_Click(object sender, EventArgs e){CloseForm();addNewForm(new FrmAddProduct());}// 打开商品信息子窗体private void button2_Click(object sender, EventArgs e){CloseForm();addNewForm(new FrmProductInfo());}
}

在子窗体中打开其他子窗体

比如:需要在商品信息子窗体中打开新增商品子窗体,那么就需要用到使用委托和事件

在 FrmProductInfo.cs 写代码:

// 定义一个委托
public delegate void addNewProduce(object sender, EventArgs e);public partial class FrmProductInfo : Form
{// 定义一个委托事件public event addNewProduce anp;public FrmProductInfo(){InitializeComponent();}private void btnAddPro_Click(object sender, EventArgs e){anp(sender, e);}
}

修改 FrmMain.cs 中的代码:

// 打开商品信息子窗体
private void button2_Click(object sender, EventArgs e)
{CloseForm();FrmProductInfo frmPI = new FrmProductInfo();frmPI.anp += this.btnAddproduct_Click;addNewForm(frmPI);
}

工程示例

BeautyWinForm

作业

实现 商品信息 窗口的布局
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 8.0.19安装教程(windows 64位)

在c盘目录下的Program Files目录下创建MySQL目录&#xff0c;将下载好的mysql解压到里面 解压完是这个样子 配置初始化的my.ini文件的文件 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirC:\Program Files\MySQL # 设置mysql数据库的数据的存放目录 datad…

Pytorch DistributedDataParallel(DDP)教程一:快速入门理论篇

Pytorch DistributedDataParallel&#xff08;DDP&#xff09;教程一&#xff1a;快速入门理论篇 目录 一、 写在前面二、什么是分布式并行训练1. 并行训练2. 数据并行 三、DDP的基本原理1. DDP的训练过程2. Ring-All-Reduce算法 四、如何搭建一个Pytorch DDP代码框架1. 与DDP有…

Shortened LLaMA:针对大语言模型的简单深度剪枝法

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题 & 发表会议&#xff1a;Shortened LLaMA: A Simple Depth Pruning for Large Language Models&#xff08;ICLR 2024 Workshop&#xff09; 论文地址&#xff1a;https://arxiv.org/abs/…

docker拉取镜像速度慢

解决办法是配置阿里云镜像加速 在docker desktop的docker engine里添加 "registry-mirrors": ["https://owzy8hoh.mirror.aliyuncs.com"] 修改以后重启docker 参考&#xff1a; 【docker】Windows10系统下安装并配置阿里云镜像加速_docker desktop 配置…

基于unity+c#的随机点名系统(简单UI界面+列表+数组)

目录 一、功能界面显示 二、UI 1、视频的使用 &#xff08;1&#xff09;渲染纹理 &#xff08;2&#xff09; 视频铺全屏 &#xff08;3&#xff09;视频的调用 2、 下拉文本框的使用&#xff08;旧版&#xff09; 3、输入文本框的使用&#xff08;旧版&#xff09; …

janus部署

配置和运行janus 1. 配置nginx 安装nginx&#xff0c;主要用来提供web访问。 生成证书 mkdir -p ~/cert cd ~/cert # CA私钥 openssl genrsa -out key.pem 2048 # 自签名证书 openssl req -new -x509 -key key.pem -out cert.pem -days 1095安装nginx #下载nginx 1.15.8版…

Unity AR开发环境搭建

在上一篇文章中&#xff0c;我定义了各种类型的扩展现实 (XR)。 在其中&#xff0c;我将增强现实 (AR) 定义为&#xff1a;增强现实 (AR) 将数字对象置于物理世界中。 通常&#xff0c;该设备将配备某种类型的相机&#xff08;例如智能手机&#xff09;&#xff0c;可以实时提供…

Spring Task 定时任务调度

一、概念 Spring Task 是 Spring 框架的一个组件&#xff0c;它为任务调度提供了支持&#xff0c;使得开发者能够创建后台任务或定期执行的任务。通过 Spring Task&#xff0c;您可以方便地在 Java 应用程序中实现定时任务&#xff0c;比如每天凌晨进行数据同步、每小时执行一…

jeecg-boot安装

我看大家都挺关注&#xff0c;所以集中上传了下代码和相关工具&#xff0c;方便大家快速完成 链接&#xff1a;https://pan.baidu.com/s/1-Y9yHVZ-4DQFDjPBWUk4-A 提取码&#xff1a;op1r 1. 下载代码 下载地址 : JEECG官方网站 - 基于BPM的低代码开发平台(低代码平台_零代…

C# 窗体应用程序 Chart控件显示实时曲线

IDE: VS2019 项目模板&#xff1a;C# windows 窗体应用(.NET Framework) 【参考】 B站上教程C#Chart控件画折线图的使用&#xff0c;关于Chart控件的属性&#xff0c;介绍得非常详细。B站上教程C#上位机Chart控件实时曲线终极讲解&#xff0c;对鼠标滚轮事件等&#xff0c;多个…

冯诺依曼结构理解

冯诺依曼结构 存储器&#xff1a;内存 数据是要在计算机的体系结构中进行流动的&#xff0c;在流动过程中对数据加工处理 从一个设备到另一个设备&#xff0c;本质是一种拷贝 CPU的计算速度是很快的&#xff0c;所以数据设备间的拷贝效率&#xff0c;决定了计算机整体的基本效率…

常见Spring相关工具报错-源码分析

常见Spring相关工具报错-源码分析 1. Resouce Bundle 国际化 yml 配置不生效 1. Resouce Bundle 国际化 yml 配置不生效 1️⃣ 配置yml 2️⃣ 报错信息 2024-04-15 15:13:57.828 [http-nio-8090-exec-1] WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - [doResolveHan…

Spring Boot | SpringBoot对 “SpringMVC“的 “整合支持“、SpringMVC“功能拓展实现“

目录: SpringMVC 的 “整合支持” ( 引入"Web依赖启动器"&#xff0c;几乎可以在无任何额外的配置的情况下进行"Web开发")1.SpringMVC "自动配置" 介绍 ( 引入Web依赖启动器"后&#xff0c;SpringBoot会自动进行一些“自动配置”&#xff0…

51单片机-LED模块

文章目录 1.点亮一个LED灯2.LED闪烁3.LED流水灯 1.点亮一个LED灯 #include <REGX52.H> void main() {P20xFE; //1111 1110while(1){} }2.LED闪烁 增加延时&#xff0c;控制LED的亮灭间隙 延时函数的添加依靠STC-ISP软件的延时函数功能代码自动生成&#xff0c;如图 #i…

童话里都是骗人的,靠可视化大屏升职加薪,除非老板脑子秀逗了。

可视化大屏有没有价值&#xff0c;肯定是有的&#xff0c;靠着可视化大屏升职加薪靠谱吗&#xff1f;不靠谱。 童话故事中的情节和元素往往是夸张和不现实的&#xff0c;不能完全应用于现实生活中。在现实世界中&#xff0c;升职加薪通常需要通过实际的工作表现、专业技能的提…

数据库练习(一)

完成以下SQL语句的编写&#xff1a; student表: score 表&#xff1a; 查询student表的所有记录 Select * from student; 查询student表的第2条到4条记录 select * from student LIMIT 1,3; 从student表查询所有学生的学号&#xff08;id&#xff09;、姓名&#xff08;n…

Java虚拟机——内存的分配详解

内存区域划分 对于大多数的程序员来说&#xff0c;Java 内存比较流行的说法便是堆和栈&#xff0c;这其实是非常粗略的一种划分&#xff0c;这种划分的“堆”对应内存模型的 Java 堆&#xff0c;“栈”是指虚拟机栈&#xff0c;然而 Java 内存模型远比这更复杂&#xff0c;想深…

【计算机毕业设计】游戏售卖网站——后附源码

&#x1f389;**欢迎来到琛哥的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 琛哥&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 琛哥在深度学习任务中展现出卓越的能力&a…

数据结构和算法(哈希表和图(A*算法精讲))

一 、哈希表 1.1 哈希表原理精讲 哈希表-散列表&#xff0c;它是基于快速存取的角度设计的&#xff0c;也是一种典型的“空间换时间”的做法 键(key)&#xff1a; 组员的编号如&#xff0c;1、5、19。。。 值(value)&#xff1a; 组员的其它信息&#xff08;包含性别、年龄和…

Python-VBA函数之旅-divmod函数

目录 1、divmod函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、相关文章&#xff1a; 个人主页&#xff1a;非风V非雨-CSDN博客 divmod函数在Python中具有广泛的应用场景&#xff0c;特别是在需要同时处理除法的商和余数的情况下。常见的应用场景有&a…