当前位置: 首页 > article >正文

【博主推荐】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.kler.cn/a/418676.html

相关文章:

  • 数据集-目标检测系列- 海边漫步锻炼人检测数据集 person >> DataBall
  • 【分布式】分布式缓存
  • [Linux] 进程间通信——匿名管道命名管道
  • 2411rust,1.83
  • React+TS+css in js 练习
  • 量化交易系统开发-实时行情自动化交易-8.2.发明者FMZ平台
  • 如何在 Ubuntu 16.04 上使用 GitLab CI 设置持续集成流水线
  • 基于ZYNQ-7000系列的FPGA学习笔记3——开发环境搭建点亮一个LED
  • 1.2 算法和算法评价
  • 计算机网络之传输层协议UDP
  • com.intellij.diagnostic.PluginException……[Plugin: hg4idea]
  • RabbitMQ在手动消费的模式下设置失败重新投递策略
  • Spring Data JPA(三) 原理分析
  • 科研学习|论文解读——基于旅游知识图谱的游客偏好挖掘和决策支持
  • 网络安全究竟是什么? 如何做好网络安全
  • 第十三周:密集嵌入算法(skip-gram)(word2vec)和嵌入语义特性
  • 【无标题】你的 github 项目,用的什么开源许可证
  • 【VUE】el-table表格内输入框或者其他控件规则校验实现
  • 学习笔记:黑马程序员JavaWeb开发教程(2024.11.28)
  • 前端js面试知识点思维导图(脑图)
  • TCP/IP网络协议栈
  • 题解:CF416C Booking System
  • 基于 Flask 和 RabbitMQ 构建高效消息队列系统:从数据生成到消费
  • leetcode 841.钥匙和房间
  • 【GESP】c++四级备考(含真题传送门)
  • 目标检测之学习路线(本科版)