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

news2024/11/29 15:09:53

文章目录

  • 前言
  • 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.coloradmin.cn/o/2249822.html

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

相关文章

第四十二篇 EfficientNet:重新思考卷积神经网络的模型缩放

文章目录 摘要1、简介2、相关工作3、复合模型缩放3.1、 问题公式化3.2、扩展维度3.3、复合比例 4、EfficientNet架构5、实验5.1、扩展MobileNets和ResNets5.2、EfficientNet的ImageNet结果5.3、EfficientNet的迁移学习结果 6、讨论7、结论 摘要 卷积神经网络(ConvNets)通常在固…

【Android】MMKV—高性能轻量化存储组件

【Android】MMKV—高性能轻量化存储组件 本文参考以及学习文档&#xff1a; Android存储&#xff1a;轻松掌握MMKV通过学习本文&#xff0c;轻松掌握腾讯开发的 MMKV 组件&#xff0c;尽早在项目中替换掉SharedPr - 掘金 MMKV——Android上的使用(替换SP存储)MMKV 是基于 mmap …

python+django自动化平台(一键执行sql) 前端vue-element展示

一、开发环境搭建和配置 pip install mysql-connector-pythonpip install PyMySQL二、django模块目录 dbOperations ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-313.pyc │ ├── admin.cpython-313.pyc │ ├── apps.cpython-313.pyc │ …

arm Rk1126 编译Qt工程报错: Could not find qmake spec

首先修改qmake.conf文件&#xff0c;配置好正确的交叉编译工具&#xff1a; 然后执行编译&#xff1a; /opt/Rv1126/Rv1126-盒子代码/rv1126-qt5-sdk/bin/qmake untitled.pro 报错。 原因&#xff1a;中文路径。修改路径为英文路径即可

[保姆式教程]使用labelimg2软件标注定向目标检测数据和格式转换

定向目标检测是一种在图像或视频中识别和定位对象的同时&#xff0c;还估计它们方向的技术。这种技术特别适用于处理有一定旋转或方向变化的对象&#xff0c;例如汽车、飞机或文本。定向目标检测器的输出是一组旋转的边界框&#xff0c;这些框精确地包围了图像中的对象&#xf…

C语言刷题笔记3(7)

7.1 数组处理斐波那契数列 题目描述:用数组来处理Fibonacci数列并输出。 输入:一个不超过40且大于2的整数n&#xff0c;表示需要处理并输出的Fibonacci数个数。 输出:输出前n个Fibonacci数&#xff0c;每行输出5个值&#xff0c;按每12位向右对齐的方式输出。请注意不要在第…

PHP 去掉特殊不可见字符 “\u200e“

描述 最近在排查网站业务时&#xff0c;发现有数据匹配失败的情况 肉眼上完全看不出问题所在 当把字符串 【M24308/23-14F‎】复制出来发现 末尾有个不可见的字符 使用删除键或左右移动时才会发现 最后测试通过 var_dump 打印 发现这个"空字符"占了三个长度 &#xf…

构建 LLM (大型语言模型)应用程序——从入门到精通(第七部分:开源 RAG)

通过检索增强生成 (RAG) 应用程序的视角学习大型语言模型 (LLM)。 本系列博文 简介数据准备句子转换器矢量数据库搜索与检索大语言模型开源 RAG&#xff08;本帖&#xff09;评估服务LLM高级 RAG 1. 简介 我们之前的博客文章广泛探讨了大型语言模型 (LLM)&#xff0c;涵盖了其…

linux基础2

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

智能产品综合开发 - 手势识别

1 实训选题目的 本次实训选择的题目是“基于树莓派的手势识别系统”&#xff0c;旨在为人们提供一种便捷的交互方式&#xff0c;使用户能够通过手势控制智能设备&#xff0c;摆脱传统的物理按键操作。通过本项目&#xff0c;我们希望能实现快速、灵活的手势识别&#xff0c;提升…

Qt常用控件之显示类控件

目录 QLabel 文本格式 设置图片 文本对齐/自动换行/边距/缩进 设置伙伴 QLCDNumber 倒计时功能 QProgressBar 进度条 QCalendarWidget QLabel QLabel 同样是 QWidget 的子类&#xff0c;所以前面博客中 QWidget 中的属性方法也是适用的 QLabel可以用来显示文本和图…

架构-微服务-环境搭建

文章目录 前言一、案例准备1. 技术选型2. 模块设计3. 微服务调用 二、创建父工程三、创建基础模块四、创建用户微服务五、创建商品微服务六、创建订单微服务 前言 ‌微服务环境搭建‌ 使用的电商项目中的商品、订单、用户为案例进行讲解。 一、案例准备 1. 技术选型 maven&a…

【JTAG】1149.6协议总结

【JTAG】1149.6协议详解-CSDN博客 IEEE 1149.6标准的基本实现需要在信号路径驱动器中添加一个时脉产生器&#xff0c;它能发射单一脉冲或一列脉冲&#xff0c;这取决于被加载到 1149.1 指令暂存器中的 EXTEST_PULSE 或 EXTEST_TRAIN 指令。1149.6在克服信道中共模讯号干扰能力…

小程序 - 个人简历

为了让招聘人员快速地认识自己&#xff0c;可以做一个“个人简历”微信小程序&#xff0c; 展示自己的个人信息。 下面将对“个人简历”微信小程序进行详细讲解。 目录 个人简历 创建图片目录 页面开发 index.wxml index.wxss 功能实现截图 总结 个人简历 创建图片目录…

Tülu 3:重新定义开源大模型的后训练范式

一、引言 在大型语言模型&#xff08;LLM&#xff09;的发展历程中&#xff0c;预训练阶段往往受到最多关注&#xff0c;动辄需要数百万美元算力投入和数万亿token的训练数据。然而&#xff0c;一个鲜为人知但同样关键的事实是&#xff1a;预训练完成的模型实际上并不能直接投…

systemverilog约束中:=和:/的区别

“x dist { [100:102] : 1, 200 : 2, 300 : 5}” 意味着其值等于100或101或102或200或300其中之一&#xff0c; 其权重比例为1:1:1:2:5 “x dist { [100:102] :/ 1, 200 : 2, 300 : 5}” 意味着等于100&#xff0c;101&#xff0c;102或200&#xff0c;或300其…

用Pycharm安装manim

由于版本和工具的差异&#xff0c;manim的安装方式不尽相同。本文用Pycharm来安装manim. 一、准备工作&#xff1a;安装相应版本的python、pycharm和ffmpeg. 此处提供一种安装ffmpeg的方式 下载地址&#xff1a;FFmpeg 下载后&#xff0c;解压到指定目录。 配置环境变量&am…

云GPU——pycharm远程连接featurize实例

点击PyCharm远程连接会有详细的教程&#xff0c; 本文补充虚拟环境的创建以及包的下载。 1、虚拟环境的创建&#xff1a; 2、虚拟环境创建好之后&#xff0c;下载需要的包 &#xff08;这种方法比较快&#xff09; 可以在python interpreter点击go to tool window&#xff0c…

Fanuc法那科机器人维修之参考位置详解

参考位置是预先设定好的一个或多个特定点位&#xff0c;当启用这一功能时&#xff0c;系统会实时且精确地判断机器人的当前关节角度是否处于预设参考位置的一定范围之内&#xff08;这个范围区间是可以根据实际需求进行设置的&#xff09;&#xff0c;并据此输出指定的信号。 这…

混淆零碎知识点

minifyEnabled true //混淆开关 zipAlignEnabled true // Zipalign优化 shrinkResources true // 移除无用的resource文件 &#xff08;必须要混淆开了之后才才可以设置为true&#xff09; proguard-rules.pro 为混淆文件 //整个文件保留 不被混淆 -keep class com.cn…