背景

要写一个APP,APP通过串口控制下位机,在此记录C#的一些常用控件的使用办法。

正文

  1. 单击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)中已做了详细介绍。

  1. 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#技术支持。(手动阴笑)

  1. 单击按键打开新的窗体
    首先,创建一个新窗体,方法为,右击项目名称点击添加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();,这个就没有限制
}
  1. 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

  1. C#窗体全屏功能
    参考jack_Meng的博客C#窗体全屏功能。

  2. 设置窗口当用户按Enter时,所单击的窗体的按钮
    在窗体的load事件中,添加如下代码:
private void Mainwin_Load(object sender, EventArgs e)
{this.AcceptButton = Yourbutton_name;
}

也可在窗体属性内找到Accecptbutton,选择对应button按键的ID。

  1. 设置书签
    按下组合键Ctrl+F2设置书签,再按组合键Ctrl+F2消除书签;按下F2跳转到下一个书签,按下Shift+F2跳转到上一个书签。

  2. 显示行号
    点击工具-->选项-->文本编辑器-->C#-->勾选行号

  3. 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;
}
  1. 多个非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#的一些常见问题相关推荐

  1. Visual Studio/SQL Server系统开发常见问题归纳

    问题1.在利用C Sharp(操作系统为Windows7 64位)将Excel数据导入到SQL Server 2005中时,出现如下提示: 解决办法:VS菜单栏 生成→"配置管理器→平台→新 ...

  2. Visual Studio 常见问题及解决方案(持续更新)

    1. " sgen.exe "已退出,代码为 1 解决方案:选定web项目,右键选择"属性"-"生成",将"生成序列化程序集&qu ...

  3. 【VB.NET】基于Visual Studio编写VB.NET程序的常见问题的解答

    我编写完的项目被保存在什么地方了? 答:默认情况下,如果不更改项目的保存路径,项目都会被存放在"我的文档\Visual Studio 2010\Projects"路径下,如果更改过 ...

  4. Visual Studio Code Go 插件文档翻译

    此插件为 Go 语言在 VS Code 中开发提供了多种语言支持. 阅读版本变更日志了解此插件过去几个版本的更改内容. 1. 语言功能 (Language Features) 1.1 智能感知 (In ...

  5. Visual Entity 下载列表(最新版为 2.0.0 ,已支持Visual Studio 2013)

    常见问题: http://www.cnblogs.com/ansiboy/archive/2011/04/06/2006839.html 发展线路: 2.x 将支持的功能有: 1.增加重构功能.当修改 ...

  6. 在Visual Studio中使用命令行参数进行调试

    我正在Visual Studio中开发一个C ++命令行应用程序,需要使用命令行参数进行调试. 目前我只使用我需要的参数(如此program.exe -file.txt )运行生成的EXE文件,但这样 ...

  7. Visual Studio Code 配置指南

    Visual Studio Code (简称 VS Code)是由微软研发的一款免费.开源的跨平台文本(代码)编辑器.在我看来它是「一款完美的编辑器」. 本文是有关 VS Code 的特性介绍与配置指 ...

  8. PaddleOCR——Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案

    PaddleOCR--Visual Studio 2019 环境下C++推理部署 CMake 编译解决方案 官方文档 环境配置 Step1: 下载PaddlePaddle C++ 预测库 paddle ...

  9. Visual Studio 2017 新功能(下)

    调试和诊断 运行时单击 只需在调试运行到此行时单击代码行旁边的图标. 无需再设置临时断点,也不必再执行多个步骤来执行代码和在所需行停止. 现在,调试器下停在中断状态时,"运行时单击" ...

  10. Qt Creator和Visual Studio双环境开发技能攻略

    前言 刚接触Qt开发时,大多数同学的第一行Qt代码是在Qt Creator中写下的. 众所周知,Qt Creator是Qt官方提供的Qt集成开发环境1,提供了对Qt应用开发的全过程支持.也就是说,使用 ...

最新文章

  1. 在 .NET 框架程序中通过DllImport使用 Win32 API
  2. 写CSDN插入图片一直无法显示?
  3. 学术不端网查重靠谱吗_毕业论文查重把知网上的英文文章翻译成中文可以吗
  4. 搬了十次家,总算搬进了自己的家
  5. JAVA基础学习之路(十一)引用传递
  6. Linux下Socket网络编程
  7. Spring的国际化(转载)
  8. python猴子选大王_“猴子选大王” 算法 python实现
  9. Atitit 提升记忆效率 有损压缩原理总结 目录 1. 常见方法 1 1.1. 抽象化提升一层 概念化 1 1.2. 骨架 ,目录化 大纲化 归纳整理 1 1.3. 提取关键词 ,摘要 ,
  10. Nexus3功能介绍
  11. atmega328p引脚图_ATMEGA328P-AU 8位AVR微控制器
  12. OpenCV 常用网址和基础知识
  13. 给自己做一块开发板 #AnyBoard
  14. week15(字符串集合:Hash、字典树、KMP)
  15. 物联网嵌入式系统的操作系统介绍
  16. 【转】很实用的编程英语词库,共收录一千五百余条词汇
  17. 制作自己的Cydia发布源
  18. 一、为何我决定写Spring Cloud专栏
  19. 美丽离岛兰屿印象图集
  20. 智能家居第一步: WiFi 设备怎么连上网

热门文章

  1. html5 video断点续播,Vue中集成vue-video-player及相关api/vue视频播放插件/支持断点续播...
  2. 微信小程序合集6(多肉植物图鉴+快递邮寄+二十四节气+番茄时钟+金融理财计算器)
  3. 服务器蓝屏显示7f,电脑蓝屏代码7f怎么解决 如何处理电脑蓝屏代码7f
  4. 华为手机怎么测试Android,华为手机怎么对硬件进行检测?华为手机硬件检测教程...
  5. ip pssql 登录写法_plsql 连接远程服务器数据库无法登录
  6. 14岁考入清华,22岁博士四年级,杜克大学杨幻睿的AI成长之路
  7. 电商运营流程图模板分享
  8. 高数 | 变限积分中的等价无穷小替换
  9. 高斯公式(div:点乘)
  10. Linux系统 查看 Vendor id 和Device id