Visual studio之C#的一些常见问题
背景
要写一个APP,APP通过串口控制下位机,在此记录C#的一些常用控件的使用办法。
正文
- 单击button控件,执行对应操作。
选择要操作的button控件,在属性栏内点击类似闪电标志一样的事件
,找到操作
,选择Click
,双击,即会在主程序中生成对应的单击事件处理代码,如下所示:
private void Combtn_Click(object sender, EventArgs e)
{// 单击按键即会执行该段代码Button Combtn = (Button)sender;Combtn.Text = "按钮按下";
}
Sender
代表触发事件的那个控件,此处,Sender
既是按钮,如上所示,将Sender
赋值给正确类型的对象,即可实现对Button控件的操作。
e
则代表该事件传入的参数。此处没有使用,在竹影青瞳的博客关于(object sender, EventArgs e)中已做了详细介绍。
- C#中声明全局变量
首先,建立一个空的类GloableVar
,在该空类声明各种全局变量,一定要声明为public
,并且变量为static
,这个static
是关键!类我们可以理解为声明了一个群体类型,但是该类型不占用实际空间,就相当于char``int
等关键词,但是在该类内参数加上了static
,既对该类对应的参数分配了实际空间,这样我们就模拟实现了全局变量的效果。代码如下:
namespace Lazercontrol
{public class GloableVar{public static bool lazerstate;// 此变量的调用办法,既直接类名GloableVar.lazerstate即可。}
}
若是需要声明一个全局的类变量,而不是单个变量,那就需要先new一个该类即可,如下:
namespace Lazercontrol
{public class GloableVar{public static SerialPort serialPort1; // class SerialPort}
}
// 在初始化函数内,new一个变量
private void InitializeSerial()
{GloableVar.serialPort1 = new SerialPort();// new一个变量// 调用方法GloableVar.serialPort1.PortName = "COM1";
}
加了static后,new的实体保存在栈
里,之后再new任何次,实体不变,就这一个。
未加static,则new的实体保存在堆
里,之后每new一次,会生成一个新的实体。
此处感谢曾老师的C#技术支持。(手动阴笑)
- 单击按键打开新的窗体
首先,创建一个新窗体,方法为,右击项目名称点击添加
,Windows窗体
,重命名名称即可,此处名称为Comsetting
。接着在主窗体内实例化窗体,代码如下:
namespace Lazercontrol
{public partial class Mainwin : Form{ComSetting comwin; // 实例化ComSetting窗口public Mainwin(){InitializeComponent();}// ```其他代码省略}
}
按照1
方法,进入到按键触发处理函数中,将窗口实例化,然后调用show()函数,打开新窗体,代码如下:
private void Combtn_Click(object sender, EventArgs e)
{Button ComBtn = (Button)sender;comwin = new ComSetting();comwin.ShowDialog(); // 打开的窗体关闭后,才能操作其他窗体// 也可以是comwin.Show();,这个就没有限制
}
- C#控件大小随窗体大小等比例变化
参考天黑不熄灯的博客园的博客C#控件大小随窗体大小等比例变化。
** 定义全局变量
private float X;//当前窗体的宽度
private float Y;//当前窗体的高度
** 功能函数setControls
//根据窗体大小调整控件大小
private void setControls(float newx, float newy, Control cons)
{//遍历窗体中的控件,重新设置控件的值foreach (Control con in cons.Controls){string[] mytag = con.Tag.ToString().Split(new char[] { ':' });//获取控件的Tag属性值,并分割后存储字符串数组float a = System.Convert.ToSingle(mytag[0]) * newx;//根据窗体缩放比例确定控件的值,宽度con.Width = (int)a;//宽度a = System.Convert.ToSingle(mytag[1]) * newy;//高度con.Height = (int)(a);a = System.Convert.ToSingle(mytag[2]) * newx;//左边距离con.Left = (int)(a);a = System.Convert.ToSingle(mytag[3]) * newy;//上边缘距离con.Top = (int)(a);Single currentSize = System.Convert.ToSingle(mytag[4]) * newy;//字体大小con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);if (con.Controls.Count > 0){setControls(newx, newy, con);}}
}
** 在窗体的Load事件中添加
private void Form1_Load(object sender, EventArgs e)
{X = this.Width;//获取窗体的宽度Y = this.Height;//获取窗体的高度setTag(this);//调用方法
}
** 在窗体的Resize事件中添加
private void Form1_Resize(object sender, EventArgs e)
{float newx = (this.Width) / X; //窗体宽度缩放比例float newy = (this.Height) / Y;//窗体高度缩放比例setControls(newx, newy, this);//随窗体改变控件大小
}
注意:窗体属性内MaximizeBox
要设置为true
。
C#窗体全屏功能
参考jack_Meng的博客C#窗体全屏功能。- 设置窗口当用户按
Enter
时,所单击的窗体的按钮
在窗体的load事件中,添加如下代码:
private void Mainwin_Load(object sender, EventArgs e)
{this.AcceptButton = Yourbutton_name;
}
也可在窗体属性内找到Accecptbutton
,选择对应button按键的ID。
设置书签
按下组合键Ctrl
+F2
设置书签,再按组合键Ctrl
+F2
消除书签;按下F2
跳转到下一个书签,按下Shift
+F2
跳转到上一个书签。显示行号
点击工具
-->选项
-->文本编辑器
-->C#
-->勾选行号
。switch() {case CONST: break;}
语句中,case后面的常量表达方法
在C/C++中,switch() {case CONST: break;}
语句中的CONST
常常使用宏定义来定义,但在C#中却没有宏定义,所以可以用C#的enum
来解决,也可以用const常量来表示,举例, case两种值,0xF0
/0x0F
,分别为MOD1/MODE2,若直接用数字表示则不太直观,所以用const来替代,代码如下:
const byte MODE1 = 0xF0; //注意常量声明为 byte
const byte MODE1 = 0x0F;
switch(Mode)
{case MODE1:break;case MODE2:break;
}
- 多个非UI线程如何访问UI控件而不被报异常
在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,如果需要访问窗口中的控件,可以在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为 false,即将将禁止跨线程访问的检查
禁能,即允许多线程访问UI控件,这个会造成无端的错误,因此不推荐使用,可以参考此篇博客C# 跨线程调用控件,
// 跨线程访问不被检查
Control.CheckForIllegalCrossThreadCalls = false;
参考于多线程中使用CheckForIllegalCrossThreadCalls = false访问窗口;
参考链接
- 竹影青瞳的博客关于(object sender, EventArgs e);
- 百度经验c# 通过按钮控件实现窗口间的跳转;
- 天黑不熄灯的博客园的博客C#控件大小随窗体大小等比例变化;
- jack_Meng的博客C#窗体全屏功能。
- bomo的博客多线程中使用CheckForIllegalCrossThreadCalls = false访问窗口;
不定期更新
记录时间:2017-4-7
记录地点:深圳WZ
转载于:https://www.cnblogs.com/ChYQ/p/6678588.html
Visual studio之C#的一些常见问题相关推荐
- Visual Studio/SQL Server系统开发常见问题归纳
问题1.在利用C Sharp(操作系统为Windows7 64位)将Excel数据导入到SQL Server 2005中时,出现如下提示: 解决办法:VS菜单栏 生成→"配置管理器→平台→新 ...
- Visual Studio 常见问题及解决方案(持续更新)
1. " sgen.exe "已退出,代码为 1 解决方案:选定web项目,右键选择"属性"-"生成",将"生成序列化程序集&qu ...
- 【VB.NET】基于Visual Studio编写VB.NET程序的常见问题的解答
我编写完的项目被保存在什么地方了? 答:默认情况下,如果不更改项目的保存路径,项目都会被存放在"我的文档\Visual Studio 2010\Projects"路径下,如果更改过 ...
- Visual Studio Code Go 插件文档翻译
此插件为 Go 语言在 VS Code 中开发提供了多种语言支持. 阅读版本变更日志了解此插件过去几个版本的更改内容. 1. 语言功能 (Language Features) 1.1 智能感知 (In ...
- Visual Entity 下载列表(最新版为 2.0.0 ,已支持Visual Studio 2013)
常见问题: http://www.cnblogs.com/ansiboy/archive/2011/04/06/2006839.html 发展线路: 2.x 将支持的功能有: 1.增加重构功能.当修改 ...
- 在Visual Studio中使用命令行参数进行调试
我正在Visual Studio中开发一个C ++命令行应用程序,需要使用命令行参数进行调试. 目前我只使用我需要的参数(如此program.exe -file.txt )运行生成的EXE文件,但这样 ...
- Visual Studio Code 配置指南
Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器.在我看来它是「一款完美的编辑器」. 本文是有关 VS Code 的特性介绍与配置指 ...
- PaddleOCR——Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案
PaddleOCR--Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案 官方文档 环境配置 Step1: 下载PaddlePaddle C++ 预测库 paddle ...
- Visual Studio 2017 新功能(下)
调试和诊断 运行时单击 只需在调试运行到此行时单击代码行旁边的图标. 无需再设置临时断点,也不必再执行多个步骤来执行代码和在所需行停止. 现在,调试器下停在中断状态时,"运行时单击" ...
- Qt Creator和Visual Studio双环境开发技能攻略
前言 刚接触Qt开发时,大多数同学的第一行Qt代码是在Qt Creator中写下的. 众所周知,Qt Creator是Qt官方提供的Qt集成开发环境1,提供了对Qt应用开发的全过程支持.也就是说,使用 ...
最新文章
- 在 .NET 框架程序中通过DllImport使用 Win32 API
- 写CSDN插入图片一直无法显示?
- 学术不端网查重靠谱吗_毕业论文查重把知网上的英文文章翻译成中文可以吗
- 搬了十次家,总算搬进了自己的家
- JAVA基础学习之路(十一)引用传递
- Linux下Socket网络编程
- Spring的国际化(转载)
- python猴子选大王_“猴子选大王” 算法 python实现
- Atitit 提升记忆效率 有损压缩原理总结 目录 1. 常见方法	1 1.1. 抽象化提升一层 概念化	1 1.2. 骨架 ,目录化 大纲化 归纳整理	1 1.3. 提取关键词 ,摘要 ,
- Nexus3功能介绍
- atmega328p引脚图_ATMEGA328P-AU 8位AVR微控制器
- OpenCV 常用网址和基础知识
- 给自己做一块开发板 #AnyBoard
- week15(字符串集合:Hash、字典树、KMP)
- 物联网嵌入式系统的操作系统介绍
- 【转】很实用的编程英语词库,共收录一千五百余条词汇
- 制作自己的Cydia发布源
- 一、为何我决定写Spring Cloud专栏
- 美丽离岛兰屿印象图集
- 智能家居第一步: WiFi 设备怎么连上网
热门文章
- html5 video断点续播,Vue中集成vue-video-player及相关api/vue视频播放插件/支持断点续播...
- 微信小程序合集6(多肉植物图鉴+快递邮寄+二十四节气+番茄时钟+金融理财计算器)
- 服务器蓝屏显示7f,电脑蓝屏代码7f怎么解决 如何处理电脑蓝屏代码7f
- 华为手机怎么测试Android,华为手机怎么对硬件进行检测?华为手机硬件检测教程...
- ip pssql 登录写法_plsql 连接远程服务器数据库无法登录
- 14岁考入清华,22岁博士四年级,杜克大学杨幻睿的AI成长之路
- 电商运营流程图模板分享
- 高数 | 变限积分中的等价无穷小替换
- 高斯公式(div:点乘)
- Linux系统 查看 Vendor id 和Device id