C#WinForm开发笔记——基本控件(一)

article/2025/8/21 20:23:54

C#学习笔记——WinForm开发

  • 一、WinForm应用程序
    • 1、VS创建WinForm桌面应用程序
      • 1>新建窗体
      • 2>添加新的窗体
      • 3>窗体
    • 2、VS各图标表示的含义
    • 3、VS各种细节
  • 二、控件
    • 1、Button
      • 1>属性
      • 2>事件
    • 2、Label
    • 3、TextBox
      • 1>属性
      • 2>事件
    • 4、Timer
      • 1>属性
    • 5、RadioButton
      • 1>属性
    • 6、GroupBox
    • 7、CheckBox
      • 1>属性
    • 8、Picture Box
      • 1>属性
  • 三、MDI窗体设计
  • 四、案例代码
    • 1、记事本登录
    • 2、爱与不爱
    • 3、跑马灯+闹钟
    • 4、老师学生登录
    • 5、MDI窗体设计
    • 6、图片翻页

一、WinForm应用程序

  • WinForm应用程序时一种智能客户端技术,我们可以使用winform应用程序帮助我们获取信息或者传输信息等。

1、VS创建WinForm桌面应用程序

1>新建窗体

在这里插入图片描述

2>添加新的窗体

在这里插入图片描述
在这里插入图片描述

  • 注意:
    再Main函数当中创建的窗体对象,我们称之为这个窗体应用程序的主窗体。也就意味着,当你将主窗体关闭后,整个应用程序就关闭了。
    在这里插入图片描述

3>窗体

  • 窗体的左上角为坐标原点,水平向右为X轴正方向,竖直向下为Y轴正方向
    在这里插入图片描述

2、VS各图标表示的含义

在这里插入图片描述

3、VS各种细节

  • 快速切换到前台
    在这里插入图片描述
    在这里插入图片描述
  • 解决方案下程序分类
    在这里插入图片描述
  • 拖动控件创建新对象
    在这里插入图片描述
  • 快速进入控件属性
    在这里插入图片描述

二、控件

1、Button

在这里插入图片描述

1>属性

  • Name:在后台要获得前台的控件对象,需要使用Name属性
    在这里插入图片描述
  • Anchor:放大缩小时固定哪端(默认上、左)
    在这里插入图片描述
  • 背景
    在这里插入图片描述
  • 右键显示
    1、先找到菜单与工具栏的ContextMenuStrip,拖到前台界面,在控件中输入信息
    在这里插入图片描述
    2、在属性中找到右键菜单栏,选择编辑好的添加到控件中
    在这里插入图片描述
  • 鼠标
    在这里插入图片描述
  • visible:指示一个控件是否可见
    在这里插入图片描述

在这里插入图片描述

  • Enable:指示一个控件是否可用
    在这里插入图片描述

2>事件

  • Button的默认事件为Click
  • 注册事件:
    1、方式一:在属性栏中找到事件、然后再找到你想要完成的事件(以点击事件为例),双击此事件,则会自动进入后台。
    在这里插入图片描述
    2、方式2:若向注册控件的默认事件,只需双击控件,即可直接进入后台(仅默认事件)
    在这里插入图片描述

在这里插入图片描述

  • 触发事件:
    在这里插入图片描述
    在这里插入图片描述

2、Label

  • 文本标签,一般配合TextBox使用
    在这里插入图片描述

3、TextBox

  • 文本框,可单行和多行输入
    在这里插入图片描述

1>属性

  • WordWarp:指示文本框是否自动换行(默认为True)
    在这里插入图片描述
  • ScrollBars:滚动条
    在这里插入图片描述
  • PassWordChar:将任意输入的文本按你规定的字符显示输出
    在这里插入图片描述

2>事件

  • TestBox的默认事件是TextChanged
    当文本框中的内容发生改变的时候触发这个事件(可配合Label使用)

4、Timer

  • 计时器:通常用于在规定时间干指定的事
    在这里插入图片描述

1>属性

  • Interval:在指定的时间内发生一次指定事件(默认以毫秒为单位)
    在这里插入图片描述

5、RadioButton

  • 单选按钮,一般结合容器(GroupBox)使用
    在这里插入图片描述

1>属性

  • Checked:指示这个控件是否被选中(默认false,不被选中)
    在这里插入图片描述
  • 提示:在一个界面中如果有多个RadioButton,如果没有进行分组,那么程运行时这些按钮都将被分为一个组,此时,可以借助GroupBox来将不同的按钮进行分组

6、GroupBox

  • 容器:用来对控件进行分组管理(将需要分组的控件拖到相应的容器即可)
    在这里插入图片描述

7、CheckBox

  • 多选按钮
    在这里插入图片描述

1>属性

  • Checked:指示这个控件是否被选中(默认false,不被选中)
    在这里插入图片描述

8、Picture Box

在这里插入图片描述

1>属性

  • SizeMode:更改导入的图片在框中的位置
    在这里插入图片描述
  • 选择图像:在控件的右上角有个三角形,点击就可以看到选择图像和更改图片位置两个选项,当然也可以直接在属性栏中导入和修改
    在这里插入图片描述

三、MDI窗体设计

  • 步骤:
    1、首先创建多个窗体,然后选择一个窗体,将其属性中的IsMdiContainer设置为true
    在这里插入图片描述
    2、添加菜单栏,并为每个菜单栏添加事件
    在这里插入图片描述
    3、创建子窗体,并设置它们的父窗体
    在这里插入图片描述

四、案例代码

1、记事本登录

在这里插入图片描述
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 记事本
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 程序加载的时候/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Form1_Load(object sender, EventArgs e){btnWordWrap.Visible = false;btnSave.Visible = false;txtWords.Visible = false;//取消文本框的自动换行txtWords.WordWrap = false;}/// <summary>/// 点击登录的时候/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnLogin_Click(object sender, EventArgs e){//首先获得用户输入的用户名string strName = txtUser.Text;//再获得用户输入的密码string strPwd = txtPwd.Text;if(strName =="admin" && strPwd =="admin"){MessageBox.Show("登陆成功");//登录成功后,让两个文本框、两个标签和登录按钮都不可见UserName.Visible = false;UserPwd.Visible = false;txtUser.Visible = false;txtPwd.Visible = false;btnLogin.Visible = false;//换行按钮、保存按钮和文本框出现btnWordWrap.Visible = true;btnSave.Visible = true;txtWords.Visible = true;}else{MessageBox.Show("用户名或密码错误,请重新输入");//如果登陆失败,清空两个文本框的内容txtUser.Clear();txtPwd.Clear();//让文本框对象获得焦点txtUser.Focus();}}/// <summary>/// 自动换行的点击事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnWordWrap_Click(object sender, EventArgs e){if(btnWordWrap.Text=="自动换行"){txtWords.WordWrap = true;btnWordWrap.Text = "取消自动换行";}else// if(btnWordWrap.Text=="取消自动换行"){txtWords.WordWrap = false;btnWordWrap.Text = "自动换行";}}private void btnSave_Click(object sender, EventArgs e){using(FileStream fsWrite = new FileStream(@"C:\Users\Administrator\Desktop\3.txt",FileMode.OpenOrCreate,FileAccess.Write)){string str = txtWords.Text;byte[] buffer = Encoding.Default.GetBytes(str);fsWrite.Write(buffer, 0, buffer.Length);MessageBox.Show("保存成功");}}}
}

2、爱与不爱

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApp2
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 当鼠标进入按钮的可见部分的时候, 给控件一个新的坐标/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_MouseEnter(object sender, EventArgs e){//给按钮一个新的坐标//给按钮获得的最大宽度就是 窗体的快读减去按钮的宽度int x = this.ClientSize.Width - btUnlove.Width;int y = this.ClientSize.Height - btUnlove.Height;Random r = new Random();//要给按钮一个随机的坐标btUnlove.Location = new Point(r.Next(0, x+1), r.Next(0, y+1));}private void button1_Click(object sender, EventArgs e){MessageBox.Show("我也爱你哦思密达~");this.Close();//关闭主窗体}private void btUnlove_Click(object sender, EventArgs e){MessageBox.Show("真讨厌!还是被你给点到了~");this.Close();}}
}

3、跑马灯+闹钟

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Media;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace Timer_test
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void timer1_Tick(object sender, EventArgs e){//MessageBox.Show("你的电脑中病毒啦~");lalTxt.Text =  lalTxt.Text.Substring(1) + lalTxt.Text.Substring(0, 1);}/// <summary>/// 每隔一秒就把当前的时间赋值给label/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void timer2_Tick(object sender, EventArgs e){lblTime.Text = DateTime.Now.ToString();//18:00 播放音乐if(DateTime.Now.Hour==18&&DateTime.Now.Minute==0){//播放音乐SoundPlayer sp = new SoundPlayer();sp.SoundLocation = @"C:\Users\Administrator\Desktop\1.wav";sp.Play();}}private void Form1_Load(object sender, EventArgs e){lblTime.Text = DateTime.Now.ToString();}}
}

4、老师学生登录

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace RedioButtob
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 点击登录的时候进行判断/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void bntLogin_Click(object sender, EventArgs e){if(rbStu.Checked==true){//用户名去空格if(txtName.Text.Trim()=="student"&&txtPwd.Text=="student"){MessageBox.Show("登录成功");}else{MessageBox.Show("用户名或密码错误,请重新输入");txtName.Clear();txtPwd.Clear();txtName.Focus();}}else{if (txtName.Text.Trim() == "teacher" && txtPwd.Text == "teacher"){MessageBox.Show("登录成功");}else{MessageBox.Show("用户名或密码错误,请重新输入");txtName.Clear();txtPwd.Clear();txtName.Focus();}}}}
}

5、MDI窗体设计

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 抖动
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void 显示子窗体ToolStripMenuItem_Click(object sender, EventArgs e){Form2 frm2 = new Form2();//创建子窗体frm2.MdiParent = this;//选择父窗体frm2.Show();Form3 frm3 = new Form3();frm3.MdiParent = this;frm3.Show();Form4 frm4 = new Form4();frm4.MdiParent = this;frm4.Show();}private void 横向排列ToolStripMenuItem_Click(object sender, EventArgs e){LayoutMdi(MdiLayout.TileHorizontal);}private void 纵向排列ToolStripMenuItem_Click(object sender, EventArgs e){LayoutMdi(MdiLayout.TileVertical);}}
}

6、图片翻页

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;namespace PictureBox实例
{public partial class Form1 : Form{public Form1(){InitializeComponent();}//获取整个目录下的文件名string[] strPath = Directory.GetFiles(@"C:\Users\Administrator\Desktop\Picture");//定义图片索引int i = 0;private void Form1_Load(object sender, EventArgs e){//改变图片显示格式pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;//导入图片pictureBox1.Image = Image.FromFile(strPath[0]);}/// <summary>/// 点击更换下一张/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){i++;if (i == strPath.Length)i = 0;pictureBox1.Image = Image.FromFile(strPath[i]);}/// <summary>/// 点击更换上一张/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){i--;if (i < 0)i = strPath.Length-1;pictureBox1.Image = Image.FromFile(strPath[i]);}}
}

http://chatgpt.dhexx.cn/article/sE8Tqi1U.shtml

相关文章

C# WinForm开发框架

自己一直想有一个完全属于自己的编程小框架&#xff0c;之前使用的方式是将每一个窗体文件都编译为一个DLL文件&#xff0c;在新建窗体的时候首先新建一个类&#xff0c;然后在这个类 里面新建窗体&#xff0c;编译之后就是一个DLL文件&#xff0c;最后通过一个函数去读取这个D…

winform开发心得

最近一直在从事winform的开发&#xff0c;每次都是需要从网上查找资料才能对应具体风格要求&#xff0c;现在总结一下。 ui方面可以使用CSkin对应的一套ui&#xff0c;使用步骤 1.在窗口界面&#xff0c;工具箱空白处点击右键&#xff0c;弹出菜单有个”选择项“&#xff0c;点…

C# WinForm开发

文章目录 C# WinForm开发1.创建C# WinForm项目a.进入项目界面b.项目结构c.自定义一个Form 2.给控件添加事件3.显示时间小项目4.控件5.几种布局a.FlowLayoutPanel 流式布局b.TableLayoutPanel 表格布局c.可以自定义控件 6.文本框7.CheckBox 复选框8.其他的一些控件9.资源文件10.…

手把手教你新建一个winform项目(史上最全)

文章目录 前言&#xff1a;第1步、打开Microsoft Visual Studio&#xff08;简称vs&#xff09;&#xff0c;本人这里使用的是Visual Studio 2017 专业版&#xff0c;如下图&#xff1a;1.2 Visual Studio Community 2019下载1.3 Visual Studio Community 2019 安装 第2步、点击…

C# Winform开发教程

目录 1.创建新的Winform工程 2.窗体编辑 2.1 主窗口 2.2 工具箱 3.工具开发 3.1 一些通用属性 3.2 Label 3.3 Button 3.4 CheckBox 3.5 ComboBox 3.6 TreeView 3.7 ContextMenuStrip 3.8 BackgroundWorker 3.9 ProgressBar 3.10 TextBox 3.11 Timer 3.12 Data…

Winform开发技术详解 - 应用环境 相关技术介绍

随着时间的推移&#xff0c;Winform也算是能够坚持下来最久的技术之一了&#xff0c;它的昔日辉煌和现今的依旧活跃&#xff0c;导致了它依旧拥有者很庞大的用户群体&#xff0c;虽然目前很多技术日新月异的&#xff0c;曾经的ASP、ASP.NET WebForm、Asp.NET MVC、WPF等技术基本…

winform开发

winform简介 winform是.Net开发平台中对Windows Form的简称&#xff0c;基于.Net Framework平台 的客户端开发技术&#xff0c;一般使用c#编程。 Windows风格的控件&#xff0c;以及时间&#xff0c;直接使用&#xff0c;开发快速 Windows form&#xff1a;Windows窗体 Window…

实时数据库数据采集接口API八爪鱼采集接口

实时数据库数据采集接口是针对国内外各种实时数据库系统(PI、IP21等)和DCS、PLC等数据源之间的进行实时数据通讯的工具。 主要包含IOServer服务器和IOClient客户端两个部分&#xff1a; IO Server运行在实时数据库服务器上&#xff0c;主要功能是把数据库的位号信息和数据请求…

07_Hudi案例实战、Flink CDC 实时数据采集、Presto、FineBI 报表可视化等

7.第七章 Hudi案例实战 7.1 案例架构 7.2 业务数据 7.2.1 客户信息表 7.2.2 客户意向表 7.2.3 客户线索表 7.2.4 线索申诉表 7.2.5 客户访问咨询记录表 7.3 Flink CDC 实时数据采集 7.3.1 开启MySQL binlog 7.3.2 环境准备 7.3.3 实时采集数据 7.3.3.1 客户信息表 7.3.3.2 客户…

实时数仓项目-实时数据采集

文章目录 第1章 实时需求概览1.1 实时需求与离线需求的比较1.2 数仓架构设计1.2.1 离线image-202101201154530071.2.2 实时 1.3 本项目主要需求1.3.1 当日用户首次登录&#xff08;日活&#xff09;分时趋势图&#xff0c;昨日对比1.3.2 当日新增付费用户(首单)分析(odsdwd)1.3…

源码分析 Sentinel 实时数据采集实现原理

本篇将重点关注 Sentienl 实时数据收集&#xff0c;即 Sentienl 具体是如何收集调用信息&#xff0c;以此来判断是否需要触发限流或熔断。 本节目录 1、源码分析 StatisticSlot1.1 StatisticSlot entry 详解1.2 StatisticSlot exit 详解 2、Sentienl Node 体系2、StatisticNod…

ISYSTEM调试实践10-实时数据采集工具daqIDEA

本文介绍一种实时数据采集的工具daqIDEA&#xff0c;该软件整合在了winIDEA内&#xff0c;可以直接通过winIDEA启动。 daqIDEA类似于jlink的jscop&#xff0c;stlink也有类似功能。原理就是利用仿真探头&#xff0c;将程序运行的变量实时采集出来&#xff0c;并通过曲线的方式显…

基于组态王6.55的实时数据采集助手V1.0

采集助手V1.0使用说明采集助手V1.0是基于北京亚控科技的组态王6.55开发的&#xff0c;用于对带485通讯功能的流量计、电能表等智能仪表的实时数据进行采集的程序&#xff0c;可将采集到的数据记录为xls电子表格形式&#xff0c;用于后期分析。 一、主要功能&#xff1a; 1、采…

如何使实时数据采集处理系统保持数据的高速传输

如何使实时数据采集处理系统保持数据的高速传输 1引言 当前&#xff0c;越来越多的设计应用领域要求具有高精度的A&#xff0f;D转换和实时处理功能。在实时数据采集处理系统设计中&#xff0c;一般需要考虑数据采集以及对采集数据的处理。而对于大数据量的实时数据采集处理系…

「山东城商行联盟数据库准实时数据采集系统」入选2021中国大数据应用样板案例

12月17日&#xff0c;由中国信息协会大数据分会主办的“2021中国大数据技术应用大会”在北京圆满落幕。来自中国信息协会、中国工程院、国家信息中心、中国软件评测中心、中国金融认证中心等的权威专家、知名企业代表出席本次大会&#xff0c;对大数据的需求、应用和产业发展进…

实时数据采集无压力,网络抓取基础架构全程保障

作为一位爬虫工程师&#xff0c;网络抓取是我在日常工作中的重要任务之一。在当今信息爆炸的时代&#xff0c;实时数据的价值愈发显著。对于企业和个人来说&#xff0c;准确及时地获取最新的数据信息&#xff0c;能够帮助做出更明智的决策&#xff0c;抓住商机&#xff0c;甚至…

BET365的websocket实时数据采集分析

BET365网站websocket实时数据采集分析 ** 前语&#xff1a; ** 本文仅用于交流学习&#xff0c;请勿用于非法用途&#xff0c;后果自负&#xff01; bet365是全球顶尖的涵盖足球篮球等各项赛事的赛事信息提供网站以及博彩网站。为啥要去爬这个网站呢&#xff1f;因为它赛事…

数据采集工具 -- Flume

1、Flume的定义 Flume由Cloudera公司开发&#xff0c;是一个分布式、高可靠、高可用的海量日志采集、聚合、传输的系统。Flume支持在日志系统中定制各类数据发送方&#xff0c;用于采集数据&#xff1b;Flume提供对数据进行简单处理&#xff0c;并写到各种数据接收方的能力。简…

PLC实时数据采集如何实现?

数据采集传输对于后续企业进行分析和决策是十分重要的&#xff0c;而实时数据采集更能提升整体生产的认识度&#xff0c;从而采取到更加及时高效的措施。因此PLC实时数据采集成为企业的基础应用&#xff0c;那么如何实现PLC的实时数据采集呢&#xff1f; 1、协议解析 协议解析…

实时数仓-数据采集层_1

实时数仓-数据采集层_1 一、实时数仓介绍1、普通实时计算与实时数仓比较2、实时电商数仓项目分层 二、实时需求概述1、离线计算与实时计算的比较2、实时需求种类2.1、日常统计报表或分析图中需要包含当日部分2.2、实时数据大屏监控2.3、数据预警或提示2.4、实时推荐系统 三、统…