【博主推荐】C#中winfrom开发常用技术点收集

文章目录

  • 前言
  • 1.打开文件夹并选中文件
  • 2.窗体之间传参
  • 3.异步调用:让数据处理不影响页面操作
  • 4.创建一个多文档界面(MDI) 应用程序
  • 5.在WinForms中使用数据绑定
  • 6.在WinForms中后台使用控件的事件处理
  • 7.在WinForms中窗体跳转的几种方式
  • 8.后台处理方法中,调用窗体方法,更新窗体内容
  • 9.下拉框赋值,绑定选中值
  • 10.弹框的几种方式
  • 结束语
  • 优质源码分享

【博主推荐】C#中winfrom开发常用技术点收集,里面包含了,在C#开发过程中,遇到的有价值的技术点,都收藏在这篇文章里面了,可以让你快速掌握并运用。如打开文件夹并选中文件;窗体之间传参;异步调用:让数据处理不影响页面操作;创建一个多文档界面(MDI) 应用程序;在WinForms中使用数据绑定;在WinForms中后台使用控件的事件处理;在WinForms中窗体跳转的几种方式;后台处理方法中,调用窗体方法,更新窗体内容;下拉框赋值,绑定选中值;弹框的几种方式。

前言

        在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。

1.打开文件夹并选中文件

System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("Explorer.exe");
string path ="D:\\TEST\\test.txt";
psi.Arguments = "/e,/select," + path;
System.Diagnostics.Process.Start(psi);

2.窗体之间传参

  • 方法1:使用构造函数传递参数

Form1窗体

public partial class Form1 : Form
{public Form1(){InitializeComponent();}private void buttonOpenForm2_Click(object sender, EventArgs e){string param = "Hello, Form2!";Form2 form2 = new Form2(param); // 使用构造函数传递参数form2.Show();}
}

Form2窗体

public partial class Form2 : Form
{public Form2(){InitializeComponent();}public Form2(string param) : this() // 调用默认构造函数{// 使用传递来的参数this.labelParameter.Text = param;}
}
  • 方法2:使用属性传递参数

Form1窗体

public partial class Form1 : Form
{public Form1(){InitializeComponent();}private void buttonOpenForm2_Click(object sender, EventArgs e){string param = "Hello, Form2!";Form2 form2 = new Form2();form2.Parameter = param; // 设置属性form2.Show();}
}

Form2窗体

public partial class Form2 : Form
{public Form2(){InitializeComponent();}public string Parameter { get; set; } // 用于传递参数的属性protected override void OnLoad(EventArgs e){base.OnLoad(e);if (Parameter != null){this.labelParameter.Text = Parameter;}}
}

3.异步调用:让数据处理不影响页面操作

  • Thread线程
new Thread(o =>
{kqDev();
})
{ IsBackground=true }
.Start();public async void kqDev() {//这里执行耗时数据
}
  • Task
private async void Button_Click(object sender, EventArgs e)
{button.Enabled = false; // 禁用按钮防止重复点击await Task.Run(() =>{// 后台任务});button.Enabled = true; // 重新启用按钮
}
  • BackgroundWorker
private void Button_Click(object sender, EventArgs e)
{var worker = new BackgroundWorker();worker.DoWork += (sender, e) =>{// 后台任务};worker.RunWorkerCompleted += (sender, e) =>{// 更新UI};worker.RunWorkerAsync();
}

4.创建一个多文档界面(MDI) 应用程序

    在 C# 的 Windows Forms 应用程序开发中,当你设置 this.IsMdiContainer = true; 时,你是在将当前的窗体(通常是一个主窗体)指定为多文档界面(MDI,Multiple Document Interface)容器。

public Form1()
{InitializeComponent();this.IsMdiContainer = true;
}private void openChildForm()
{Form childForm = new Form();childForm.MdiParent = this;childForm.Show();
}

5.在WinForms中使用数据绑定

    在WinForms中,您可以使用数据绑定来自动同步数据源和UI控件之间的数据。您可以使用 BindingSource 组件来创建绑定,并将其绑定到数据源。

public class MyData
{public string Name { get; set; }public int Age { get; set; }
}public Form1()
{InitializeComponent();var dataSource = new BindingSource();dataSource.DataSource = typeof(MyData);var textBoxName = new TextBox();textBoxName.DataBindings.Add("Text", dataSource, "Name");var textBoxAge = new TextBox();textBoxAge.DataBindings.Add("Text", dataSource, "Age");this.Controls.Add(textBoxName);this.Controls.Add(textBoxAge);
}

6.在WinForms中后台使用控件的事件处理

    在WinForms中,每个控件都有许多事件,如 Click, KeyPress, MouseEnter 等,您可以通过编写事件处理程序来响应这些事件。

public Form1()
{InitializeComponent();var button = new Button();button.Text = "Click Me";button.Click += new EventHandler(Button_Click);this.Controls.Add(button);
}private void Button_Click(object sender, EventArgs e)
{MessageBox.Show("Button Clicked!");
}

7.在WinForms中窗体跳转的几种方式

  • 直接打开子窗体
// 假设当前窗体是Form1,要跳转到Form2
Form2 form2 = new Form2();
this.Hide(); // 隐藏当前窗体
form2.Show(); // 显示Form2
  • 以模态对话框的形式显示窗体
// 假设当前窗体是Form1,要以模态对话框的形式打开Form2
Form2 form2 = new Form2();
form2.ShowDialog(); // 显示Form2作为模态对话框
form2.Dispose(); // 关闭对话框后释放资源
  • 启动新的窗体并关闭旧窗体
// 启动应用程序时,显示Form1
Application.Run(new Form1());// 在Form1中跳转到Form2
Form2 form2 = new Form2();
Application.Run(form2);

8.后台处理方法中,调用窗体方法,更新窗体内容

  • 窗体中的方法
    窗体Form1.cs,里面有一个myMethod(),然后让后台数据处理调用。
public Form1()
{
}
public void InitData()
{//这里是自定义数据处理方法
}
  • 全局类的方法,调用这个就能控制窗体的方法
public static void ChangeData()
{try{foreach (Form openForm in Application.OpenForms){if (openForm is Form1){Form1 myOpenForm = (Form1)openForm;if (myOpenForm._sIndex == index){myOpenForm.InitData();}//Console.WriteLine(myOpenForm.Name); // 输出窗体的名称//Console.WriteLine(myOpenForm._sIndex); // 输出窗体中的公共变量}}}catch (Exception){}
}

9.下拉框赋值,绑定选中值

注:cbXlk是ComboBox下拉框的name。

//添加值
cbXlk.Items.Add("项1");
cbXlk.Items.Add("项2");
cbXlk.Items.Add("项3");//绑定值
comboBox1.DataSource = yourData; // yourData是一个数据集合,例如List<T>或DataTable
comboBox1.ValueMember = "ValueProperty"; // 数据项中作为值的属性
comboBox1.DisplayMember = "DisplayProperty"; // 数据项中作为显示文本的属性
// 设置默认选中的值
comboBox1.SelectedValue = defaultValue; // defaultValue是你想要默认选中的值// 设置默认选中的值
comboBox1.SelectedValue = defaultValue; // defaultValue是你想要默认选中的值
// 通过项目的文本赋值
cbXlk.SelectedItem = "你要选择的项";// 或者通过项目的索引赋值
cbXlk.SelectedIndex = 0; // 选择第一个项目//根据值获取索引
this.cbXlk.SelectedIndex = cbXlk.Items.IndexOf("项2");

10.弹框的几种方式

  • 普通消息弹框,确认取消操作
MessageBox.Show("这是一个消息弹框");MessageBox.Show("这是一个消息弹框", "标题", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);//MessageBox.Show 与自定义提示: 可以通过设置 MessageBoxDefaultButton 来设置默认按钮,通过 MessageBoxOptions 来设置弹框的样式。
MessageBox.Show("这是一个消息弹框", "标题", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);//MessageBox.Show 与返回值: 可以通过返回值来判断用户点击了哪个按钮。
DialogResult result = MessageBox.Show("确认操作吗?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{// 用户点击了"是"
}
else
{// 用户点击了"否"
}
  • 弹框输入值
using System;
using System.Windows.Forms;public class InputBoxExample
{public static void Main(){string input = ShowInputBox("请输入值", "输入标题", "默认值");Console.WriteLine("你输入的值是: " + input);}public static string ShowInputBox(string message, string title, string defaultValue){Form inputForm = new Form();InputBox inputBox = new InputBox(inputForm, message, title, defaultValue);inputForm.ShowDialog();return inputBox.InputText;}
}public class InputBox
{private TextBox textBox;private Form dialogForm;public string InputText { get; private set; }public InputBox(Form dialogForm, string message, string title, string defaultValue){this.dialogForm = dialogForm;dialogForm.Text = title;Label label = new Label();label.Text = message;textBox = new TextBox();textBox.Text = defaultValue;Button okButton = new Button();okButton.Text = "OK";okButton.DialogResult = DialogResult.OK;okButton.Click += OkButton_Click;Button cancelButton = new Button();cancelButton.Text = "Cancel";cancelButton.DialogResult = DialogResult.Cancel;cancelButton.Click += CancelButton_Click;dialogForm.AcceptButton = okButton;dialogForm.CancelButton = cancelButton;dialogForm.Controls.Add(label);label.SetBounds(10, 10, 300, 20);dialogForm.Controls.Add(textBox);textBox.SetBounds(10, 30, 300, 20);dialogForm.Controls.Add(okButton);okButton.SetBounds(150, 70, 100, 23);dialogForm.Controls.Add(cancelButton);cancelButton.SetBounds(270, 70, 100, 23);}private void OkButton_Click(object sender, EventArgs e){InputText = textBox.Text;}private void CancelButton_Click(object sender, EventArgs e){InputText = "";}
}

--------------- 业精于勤,荒于嬉 ---------------

请添加图片描述

--------------- 行成于思,毁于随 ---------------

结束语

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。

优质源码分享

  • 【百篇源码模板】html5各行各业官网模板源码下载

  • 【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)

  • 【VUE系列】VUE3实现个人网站模板源码

  • 【HTML源码】HTML5小游戏源码

  • 【C#实战案例】C# Winform贪吃蛇小游戏源码


在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署(有自己的阿里云);
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://blog.csdn.net/weixin_43151418/article/details/143685283(防止抄袭,原文地址不可删除)

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

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

相关文章

Matlab 绘制雷达图像完全案例和官方教程(亲测)

首先上官方教程链接 polarplothttps://ww2.mathworks.cn/help/matlab/ref/polarplot.html 上实例 % 定义角度向量和径向向量 theta linspace(0, 2*pi, 5); r1 [1, 2, 1.5, 2.5, 1]; r2 [2, 1, 2.5, 1.5, 2];% 绘制两个雷达图 polarplot(theta, r1, r-, LineWidth, 2); hold …

乌班图单机(不访问外网)部署docker和服务的方法

面向对象:Ubuntu不能访问外网的机子,部署mysql、redis、jdk8、minio 过程: 1、安装docker(照着图去这里找对应的下载下来https://download.docker.com/linux/static/stable/),将7个docker官网下载的文件下载下来后,传上去服务器随便一个文件夹或者常用的opt或者/usr/lo…

响应式编程一、Reactor核心

目录 一、前置知识1、Lambda表达式2、函数式接口 Function3、StreamAPI4、Reactive-Stream1&#xff09;几个实际的问题2&#xff09;Reactive-Stream是什么&#xff1f;3&#xff09;核心接口4&#xff09;处理器 Processor5&#xff09;总结 二、Reactor核心1、Reactor1&…

Docker for Everyone Plus——No Enough Privilege

直接告诉我们flag在/flag中&#xff0c;访问第一小题&#xff1a; sudo -l查看允许提权执行的命令&#xff1a; 发现有image load命令 题目指明了有rz命令&#xff0c;可以用ZMODEM接收文件&#xff0c;看到一些write up说可以用XShell、MobaXterm、Tabby Terminal等软件连接上…

深度学习基础2

1.损失函数 1.1 线性回归损失函数 1.1.1 MAE损失 MAE&#xff08;Mean Absolute Error&#xff0c;平均绝对误差&#xff09;通常也被称为 L1-Loss&#xff0c;通过对预测值和真实值之间的绝对差取平均值来衡量他们之间的差异。。 公式&#xff1a; 其中&#xff1a; n 是样…

【Android】组件化嘻嘻嘻gradle耶耶耶

文章目录 Gradle基础总结&#xff1a;gradle-wrapper项目根目录下的 build.gradlesetting.gradle模块中的 build.gradlelocal.properties 和 gradle.properties 组件化&#xff1a;项目下新建一个Gradle文件定义一个ext扩展区域config.gradle全局基础配置&#xff08;使用在项目…

基础Web安全|SQL注入

基础Web安全 URI Uniform Resource Identifier&#xff0c;统一资源标识符&#xff0c;用来唯一的标识一个资源。 URL Uniform Resource Locator&#xff0c;统一资源定位器&#xff0c;一种具体的URI&#xff0c;可以标识一个资源&#xff0c;并且指明了如何定位这个资源…

【插入排序】:直接插入排序、二分插入排序、shell排序

【插入排序】&#xff1a;直接插入排序、二分插入排序、shell排序 1. 直接插入排序1.1 详细过程1.2 代码实现 2. 二分插入排序2.1 详细过程2.2 代码实现 3. shell排序3.1 详细过程3.2 代码实现 1. 直接插入排序 1.1 详细过程 1.2 代码实现 public static void swap(int[]arr,…

一万台服务器用saltstack还是ansible?

一万台服务器用saltstack还是ansible? 选择使用 SaltStack 还是 Ansible 来管理一万台服务器&#xff0c;取决于几个关键因素&#xff0c;如性能、扩展性、易用性、配置管理需求和团队的熟悉度。以下是两者的对比分析&#xff0c;帮助你做出决策&#xff1a; SaltStack&…

通讯专题4.1——CAN通信之计算机网络与现场总线

从通讯专题4开始&#xff0c;来学习CAN总线的内容。 为了更好的学习CAN&#xff0c;先从计算机网络与现场总线开始了解。 1 计算机网络体系的结构 在我们生活当中&#xff0c;有许多的网络&#xff0c;如交通网&#xff08;铁路、公路等&#xff09;、通信网&#xff08;电信、…

使用OSPF配置不同进程的中小型网络

要求&#xff1a; 给每个设备的接口配置好相应的地址 对进程1的各区域使用认证&#xff0c;认证为明文发送&#xff0c;明文保存 对骨干区域使用接口认证&#xff0c;非骨干区域使用区域认证 其他ospf进程均使用区域0 FW1上配置接口信任域和非信任域和服务器&#xff0c…

软考高项经验分享:我的备考之路与实战心得

软考&#xff0c;尤其是信息系统项目管理师&#xff08;高项&#xff09;考试&#xff0c;对于众多追求职业提升与专业认可的人士来说&#xff0c;是一场充满挑战与机遇的征程。我在当年参加软考高项的经历&#xff0c;可谓是一波三折&#xff0c;其中既有成功的喜悦&#xff0…

Transformers在计算机视觉领域中的应用【第1篇:ViT——Transformer杀入CV界之开山之作】

目录 1 模型结构2 模型的前向过程3 思考4 结论 论文&#xff1a; AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 代码&#xff1a;https://github.com/google-research/vision_transformer Huggingface&#xff1a;https://github.com/huggingf…

Unity3D模型场景等测量长度和角度功能demo开发

最近项目用到多段连续测量物体长度和角度功能&#xff0c;自己研究了下。 1.其中向量角度计算&#xff1a; 需要传入三个坐标来进行计算。三个坐标确定两条向量线段的方向&#xff0c;从而来计算夹角。 public Vector3 SetAngle(Vector3 p1, Vector3 p2,Vector3 p3) { …

蓝桥杯第 23 场 小白入门赛

一、前言 好久没打蓝桥杯官网上的比赛了&#xff0c;回来感受一下&#xff0c;这难度区分度还是挺大的 二、题目总览 三、具体题目 3.1 1. 三体时间【算法赛】 思路 额...签到题 我的代码 // Problem: 1. 三体时间【算法赛】 // Contest: Lanqiao - 第 23 场 小白入门赛 …

从0开始学PHP面向对象内容之常用设计模式(享元)

二、结构型设计模式 7、享元模式&#xff08;Flyweight Pattern&#xff09; 这里是引用享元模式&#xff08;Flyweight Pattern&#xff09; 是一种结构型设计模式&#xff0c;旨在通过共享对象来减少内存使用&#xff0c;尤其适用于大量相似对象的场景。通过共享和重用对象的…

YOLO 标注工具 AutoLabel 支持 win mac linux

常见的标注工具&#xff0c;功能基础操作繁琐&#xff0c;无复制粘贴&#xff0c;标签无法排序修改&#xff0c;UI不美观&#xff0c;bug修正不及时&#xff0c;没有集成识别、训练、模型导出… 怎么办呢&#xff1f;AutoLabel它来了 Quick Start 一图胜千言 图像标注 支持YOL…

《Python基础》之Python中可以转换成json数据类型的数据

目录 一、JSON简介 JSON有两种基本结构 1、对象&#xff08;Object&#xff09; 2、数组&#xff08;Array&#xff09; 二、将数据装换成json数据类型方法 三、在Python中&#xff0c;以下数据类型可以直接转换为JSON数据类型 1、字典&#xff08;Dictionary&#xff09…

如何在Bash中等待多个子进程完成,并且当其中任何一个子进程以非零退出状态结束时,使主进程也返回一个非零的退出码?

文章目录 问题回答参考 问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成&#xff0c;并且当这其中任意一个子进程以非零退出码结束时&#xff0c;让该脚本也返回一个非零的退出码&#xff1f; 简单的脚本: #!/bin/bash for i in seq 0 9; docalculations $i & d…

远程桌面协助控制软件 RustDesk v1.3.3 多语言中文版

RustDesk 是一款开源的远程桌面软件&#xff0c;支持多平台操作&#xff0c;包括Windows、macOS、Linux、iOS、Android和Web。它提供端到端加密和基于角色的访问控制&#xff0c;确保安全性和隐私保护。使用简单&#xff0c;无需复杂配置&#xff0c;通过输入ID和密码即可快速连…