C#高级:Winform中的自定义窗体输入

目录

一、多样式输入(无封装)

1.代码

2.效果 

二、单输入框封装

1.使用

2.封装

3.效果

三、组合框批量输入封装

1.使用

2.封装

3.效果


一、多样式输入(无封装)

1.代码

private async void button1_Click(object sender, EventArgs e)
{// 在方法中直接创建一个新的窗体Form inputForm = new Form{Text = "输入对话框",Width = 300,Height = 300,MaximizeBox  = false,StartPosition = FormStartPosition.CenterScreen};// 创建控件Label textlabel = new Label { Text = "文本输入:", Width =80,Location = new System.Drawing.Point(20, 15) };TextBox textBox = new TextBox { Location = new System.Drawing.Point(110, 10), Width = 150 };CheckBox checkBox = new CheckBox { Text = "是否选中", Location = new System.Drawing.Point(20, 60) };RadioButton radioButton1 = new RadioButton { Text = "选项 1", Location = new System.Drawing.Point(20, 100), Checked = true };RadioButton radioButton2 = new RadioButton { Text = "选项 2", Location = new System.Drawing.Point(130, 100) };ComboBox comboBox = new ComboBox{Location = new System.Drawing.Point(20, 140),Width = 200,Items = { "选项 A", "选项 B", "选项 C" }};comboBox.SelectedIndex = 0; // 默认选中第一项NumericUpDown numericUpDown = new NumericUpDown{Location = new System.Drawing.Point(20, 180),Width = 200,Minimum = 0,Maximum = 100,Value = 10};// 创建确认按钮Button btnOK = new Button{Text = "确定",Height=30,Location = new System.Drawing.Point(20, 220)};btnOK.Click += (s, args) =>{// 获取控件的值string textBoxInput = textBox.Text;bool checkBoxChecked = checkBox.Checked;string radioButtonSelection = radioButton1.Checked ? "选项 1" : "选项 2";string comboBoxSelection = comboBox.Text;decimal numericValue = numericUpDown.Value;// 显示结果MessageBox.Show($"你输入的内容:\n" +$"文本框: {textBoxInput}\n" +$"复选框: {checkBoxChecked}\n" +$"单选框: {radioButtonSelection}\n" +$"下拉框: {comboBoxSelection}\n" +$"数字框: {numericValue}");// 关闭窗体inputForm.Close();};// 创建取消按钮Button btnCancel = new Button{Text = "取消",Height = 30,Location = new System.Drawing.Point(120, 220)};btnCancel.Click += (s, args) =>{// 取消操作,关闭窗体inputForm.Close();};// 将控件添加到窗体inputForm.Controls.Add(textlabel);inputForm.Controls.Add(textBox);inputForm.Controls.Add(checkBox);inputForm.Controls.Add(radioButton1);inputForm.Controls.Add(radioButton2);inputForm.Controls.Add(comboBox);inputForm.Controls.Add(numericUpDown);inputForm.Controls.Add(btnOK);inputForm.Controls.Add(btnCancel);// 显示窗体inputForm.ShowDialog();
}

2.效果 

二、单输入框封装

1.使用

异步方法返回结果需要通过.Result获取

//点击触发自定义弹窗输入
private async void button1_Click(object sender, EventArgs e)
{var result = GetTextInput("请输入您的尊姓大名").Result;
}

2.封装

//新建自定义窗体,输入提示语,是否采用文本框(false=采用数字框)
private async Task<string> GetTextInput(string laebl,bool isUseTextBox=true)
{//多少个输入框:var InputLength = laebl.Length;int labelwidth = InputLength * 20 + 5;// 在方法中直接创建一个新的窗体Form inputForm = new Form{Text = "请输入",Width = labelwidth+300,Height = 180,MaximizeBox = false,StartPosition = FormStartPosition.CenterScreen};// 创建控件Label label = new Label { Text = laebl + ":", Width = labelwidth, Location = new System.Drawing.Point(20, 23), BackColor = Color.Transparent };TextBox textBox = new TextBox();NumericUpDown numericUpDown = new NumericUpDown();inputForm.Controls.Add(label);int input_x = labelwidth + 20;if (isUseTextBox){textBox  = new TextBox { Location = new System.Drawing.Point(input_x, 20), Width = 200 };inputForm.Controls.Add(textBox);}else{numericUpDown = new NumericUpDown{Location = new System.Drawing.Point(input_x, 20),Width = 200,Minimum = 0,Maximum = 100000000000,Value = 1};inputForm.Controls.Add(numericUpDown);}// 创建确认按钮Button btnOK = new Button{Text = "确定",Height = 30,Location = new System.Drawing.Point(input_x, 70)};string result = "";btnOK.Click += (s, args) =>{//结果赋值result = isUseTextBox ? textBox.Text : numericUpDown.Value.ToString();// 关闭窗体inputForm.Close();};// 创建取消按钮Button btnCancel = new Button{Text = "取消",Height = 30,Location = new System.Drawing.Point(input_x+100, 70)};btnCancel.Click += (s, args) =>{// 取消操作,关闭窗体inputForm.Close();};// 将btn控件添加到窗体inputForm.Controls.Add(btnOK);inputForm.Controls.Add(btnCancel);// 显示窗体inputForm.ShowDialog();return result;
}

3.效果

三、组合框批量输入封装

1.使用

异步方法返回结果需要通过.Result获取

 //点击触发自定义弹窗输入private async void button1_Click(object sender, EventArgs e){List<Dictionary<string, List<string>>> list = new List<Dictionary<string, List<string>>>{new Dictionary<string, List<string>> { { "选择一", new List<string> { "1", "2", "3" } } },new Dictionary<string, List<string>> { { "选择二", new List<string> { "4", "5", "6" } } },new Dictionary<string, List<string>> { { "选择三", new List<string> { "7", "8", "9" } } }};var result = GetComboboxInput(list).Result;}

2.封装

//新建自定义窗体,提示语:输入框选项
private async Task<List<string>> GetComboboxInput(List<Dictionary<string, List<string>>> list)
{//多少个输入框:var InputCount = list.Count;var InputLabels = list.SelectMany(x => x.Keys).ToList();var InputValues = list.SelectMany(x => x.Values).ToList();int addheight = 50;// 在方法中直接创建一个新的窗体Form inputForm = new Form{Text = "请输入",Width = 350,Height = InputCount * addheight + 130,MaximizeBox = false,StartPosition = FormStartPosition.CenterScreen};// 创建控件List<Label> LaeblList = new List<Label>();List<ComboBox> ComboBoxList = new List<ComboBox>();int y = 20;for (int i = 0; i < InputCount; i++){Label en_label = new Label { Text = InputLabels[i] + ":", Width = 80, Location = new System.Drawing.Point(20, y+3),BackColor=Color.Transparent };ComboBox en_com = new ComboBox { DataSource = InputValues[i], Width = 200, Location = new System.Drawing.Point(100, y) };LaeblList.Add(en_label);ComboBoxList.Add(en_com);inputForm.Controls.Add(en_label);inputForm.Controls.Add(en_com);y += addheight;}// 创建确认按钮int btn_y = InputCount * addheight + 20;Button btnOK = new Button{Text = "确定",Height = 30,Location = new System.Drawing.Point(80, btn_y)};List<string> result = new List<string>();btnOK.Click += (s, args) =>{//结果赋值result = ComboBoxList.Select(x => x.Text).ToList();// 关闭窗体inputForm.Close();};// 创建取消按钮Button btnCancel = new Button{Text = "取消",Height = 30,Location = new System.Drawing.Point(180, btn_y)};btnCancel.Click += (s, args) =>{// 取消操作,关闭窗体inputForm.Close();};// 将btn控件添加到窗体inputForm.Controls.Add(btnOK);inputForm.Controls.Add(btnCancel);// 显示窗体inputForm.ShowDialog();return result;
}
如果输入的label太长,请手动调节窗体宽度、combobox的x坐标

3.效果

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

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

相关文章

memblock内存分配器

一、简述 memblock 是 Linux 内核中的一个内存管理子系统&#xff0c;主要用于在系统启动早期阶段管理物理内存。它在内核初始化期间负责管理内存&#xff0c;直到更复杂的内存管理子系统&#xff08;如伙伴系统&#xff09;接管。 二、工作原理 初始化&#xff1a;在内核启…

【C++滑动窗口】1248. 统计「优美子数组」|1623

本文涉及的基础知识点 C算法&#xff1a;滑动窗口及双指针总结 LeetCode1248. 统计「优美子数组」 给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字&#xff0c;我们就认为这个子数组是「优美子数组」。 请返回这个数组中 「优美子数组」 的数…

⽂件内容的读写

文件 InputStream &#xff08;字节流读出 抽象类&#xff09; InputStream 只是⼀个抽象类&#xff0c;要使⽤还需要具体的实现类 FileInputStream&#xff08;字节流读出&#xff09; OutputStream&#xff08;字节流写入&#xff09; Reader&#xff08;字符流读入&#xff…

FreeRTOS消息队列实验与出现的问题

目录 实验名字&#xff1a;队列操作实验 1、实验目的 2、实验设计 3、实验工程 4、实验程序与分析 ●任务设置 ● 其他应用函数 ● main()函数 ● 任务函数 ●中断初始化及处理过程 5.程序运行结果分析 6.进行实验移植时所遇到的问题 1.项目中mymalloc等函数缺少 …

el-cascader 使用笔记

1.效果 2.官网 https://element.eleme.cn/#/zh-CN/component/cascader 3.动态加载&#xff08;官网&#xff09; <el-cascader :props"props"></el-cascader><script>let id 0;export default {data() {return {props: {lazy: true,lazyLoad (…

Linux之进程概念(2)

Linux之进程概念&#xff08;2&#xff09; 孤儿进程 父进程如果提前退出&#xff0c;那么子进程后退出&#xff0c;进入Z之后&#xff0c;那该如何处理呢&#xff1f; 父进程先退出&#xff0c;子进程就称之为“孤儿进程” 孤儿进程被1号init进程领养&#xff0c;当然要有in…

1+X应急响应(网络)日志分析:

日志分析&#xff1a; Web日志分析&#xff1a; http协议&#xff1a; http版本演变&#xff1a; http协议工作原理&#xff1a; http协议的特点&#xff1a; http请求报文&#xff1a; http请求方法&#xff1a; http响应报文&#xff1a; UserId&#xff1a;注册网站的序列号…

go-zero(二) api语法和goctl应用

go-zero api语法和goctl应用 在实际开发中&#xff0c;我们更倾向于使用 goctl 来快速生成代码。 goctl 可以根据 api快速生成代码模板&#xff0c;包括模型、逻辑、处理器、路由等&#xff0c;大幅提高开发效率。 一、构建api demo 现在我们通过 goctl 创建一个最小化的 HT…

计算机编程中的设计模式及其在简化复杂系统设计中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的…

latex中,两个相邻的表格,怎样留一定的空白

目录 问题描述 问题解决 问题描述 在使用latex写论文时&#xff0c;经常表格需要置顶写&#xff0c;则会出现两个表格连在一起的情况。下一个表名容易与上面的横线相连&#xff0c;如何通过明令&#xff0c;留出一定的空白。 问题解决 在第二个表格的 \centering命令之后…

leetcode01——合并两个有序数组

0.本题学到的知识 1.python的操作中&#xff0c;哪些是在原数据上进行操作的&#xff1f; 新开辟的行为&#xff1a;list1list1[m:n] 原数据&#xff1a;list1[a:b]list1[m:n] 新开辟&#xff1a;list1list1list2 原数据&#xff1a;list1.append(list2[i]); list1.extend(list…

深度学习的艺术:揭秘卷积神经网络(CNN)的神秘面纱

深度学习的艺术&#xff1a;揭秘卷积神经网络&#xff08;CNN&#xff09;的神秘面纱 一、CNN的构成要素二、CNN的工作流程三、CNN的应用领域四、CNN的优势与局限 #引言&#xff1a; 在人工智能的璀璨星空中&#xff0c;卷积神经网络&#xff08;CNN&#xff09;如同一颗耀眼的…

Linux高阶——1116—环形队列生产者消费者

目录 1、环形队列 2、生产者消费者 环形队列数组实现代码 成功截图 1、环形队列 相比于线性队列&#xff0c;环形队列可以有效避免访问越界问题&#xff0c;使用下标访问队列元素时&#xff0c;到达末尾后下标归0&#xff0c;返回起始位置&#xff0c;使用下标运算即可 a…

学习大数据DAY61 宽表加工

目录 模型设计 加工宽表 任务调度&#xff1a; 大表 - 把很多数据整合起来 方便后续的明细查询和指标计算 模型设计 设计 建模 设计: excel 文档去编写 建模: 使用建模工具 PowerDesigner Navicat 在线画图工具... 把表结构给绘 制出来 共享\项目课工具\pd 加工宽表 数…

DBeaver MACOS 安装 并连接到docker安装的mysql

官网下载&#xff1a;Download | DBeaver Community 网盘下载&#xff1a;链接: https://pan.baidu.com/s/15fAhbflHO-AGc-uAnc3Rjw?pwdbrz9 提取码: brz9 下载驱动 连接测试 报错 null, message from server: "Host 172.17.0.1 is not allowed to connect to this M…

24首届数证杯(流量分析部分)

目录 流量分析 流量分析 1、分析网络流量包检材&#xff0c;写出抓取该流量包时所花费的秒数?(填写数字&#xff0c;答案格式:10) 3504相加即可 2、分析网络流量包检材&#xff0c;抓取该流量包时使用计算机操作系统的build版本是多少? 23F793、分析网络流量包检材&#x…

云服务器ECS经济型e实例和通用算力u1实例有啥区别?

阿里云服务器ECS经济型e实例怎么样&#xff1f;对比ECS通用算力型u1实例哪个更好&#xff1f;u1实例更好。阿里云服务器网aliyunfuwuqi.com二者均为云服务器ECS的实例规格&#xff0c;e实例是共享型云服务器&#xff0c;u1实例是独享型云服务器&#xff0c;何为共享&#xff1f…

QT中使用图表之QChart绘制柱状图

绘制条形&#xff08;柱状&#xff09;图&#xff0c;系列选择条形系列QBarSeries x轴选择条形图的种类轴QBarCategoryAxis 1、创建图表视图 //1、创建图表视图 QChartView * view new QChartView(this); //开启抗锯齿 view -> setRenderHint(QPainter::Antialiasing); …

Essential Cell Biology--Fifth Edition--Chapter one (8)

1.1.4.6 The Cytoskeleton [细胞骨架] Is Responsible for Directed Cell Movements 细胞质基液不仅仅是一种无结构的化学物质和细胞器的混合物[soup]。在电子显微镜下&#xff0c;我们可以看到真核细胞的细胞质基液是由长而细的丝交叉而成的。通常[Frequently]&#xff0c;可…

【Linux】守护进程

目录 进程组 会话 作业控制 实现守护进程 我们在写完一些网络服务后&#xff0c;如果想让这个服务一直在云服务器的后台运行着&#xff0c;那该如何实现呢&#xff1f;其实就用到了这篇博客要讲的守护进程 进程组 我们首先需要了解进程组的概念&#xff0c;其实sleep 1000这…