文章目录
- 前言
- 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(防止抄袭,原文地址不可删除)