版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、公司需要做一个串口调试软件,和普通的串口助手有些不同,在开发过程中遇到了一些问题,这个文档是问题和解决方法的总结,还有在解决问题时查询的一些知识性的东西,文档是笔记性质的,比较乱,希望对大家有帮助。VS2010 尝试运行项目时出错:无法启动调试两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上。2) 打开项目属性,选择调试选项卡,将“启用Visual Studio宿主进程“一项钩掉。C#中在窗体1中单击按钮打开窗体2,出错原因是ob_FrmCom.show应该是大写的ob_FrmCom.Show误双击控件生成的代码如何删掉?双击错误列表的提示,跳转到窗体的定义文
2、件中,只要将带蓝线的的那一整行删掉,然后保存生成一次就可以了!问题:Windows已在“xxx.exe”中触发了一个断点。其原因可能是堆被破坏,这说明xxx.exe中或它所加载的任何DLL中有Bug。原因也可能是用户在xxx.exe具有焦点时按下F12.输出窗口可能提供了更多诊断信息。原因:1. 内存越界,比如“数组越界”、“释放已经释放掉的内存”、“共享内存引发的问题”、“释放野指针的问题”等。2. 用到的第三方库版本不一致,比如“VS2010用到VS2013生成的DLL”、“Debug模式下用了Release模式下生成的库”、“代码生成中的MDD和MD”,可能还有其他第三方库的版本不一致问
3、题。如果之前没有这样的错误,突然出现了,很可能是你不小心delete了一个野指针。vs2010C#编程中删除一个控件和相关的能看见的代码后出现错误:当前上下文中不存在名称(控件名称)关闭解决方案后重新打开就好了.c#如何连接两个字符串用vs2005的c#写网页,我定义了两个字符串,一个是yy=2008,另一个是mm=10,如何把两个字符串连起来变成200810?如果是简单的连接的话,用+就可以了。如果字符串比较长或连接次数比较多的时候推荐使用StringBuilder.1, string yy = yy + zz;2,StringBuilder MyStringBuilder = new St
4、ringBuilder();MyStringBuilder.Append(yy);MyStringBuilder.Append(zz);string yy = MyStringBuilder.ToString();C#中有没有快捷键使格式自动对齐选中要格式化的代码,按ctrl+k然后再按ctrl+f。C#如何让textBox中显示一些内容,然后鼠标单击进去之后自动清空?在窗体的构造函数里或者文本框的属性中给textbox赋值textBox1.Text = 1234;然后在vs设计界面点击该textbox,在右下角的属性框那里点击闪电图标,找到里面的MouseClick事件,双击进去。里面写:t
5、extBox1.Text =;运行后点击textbox就执行MouseClick函数的。C#中单击按钮清除同一个groupBox中的文本框中内容方法:用foreach遍历该groupBox中所有文本框。private void btnClear_Click(object sender, EventArgs e) foreach (Control 遍历的时候,需要用Control遍历;如果直接使用foreach(TextBox t in groupBox1.Controls)并且groupbox上有Lable或其他非textbox控件的时候,会提示不能强制转换为textbox所以,需要使用 is
6、来判断,获取的控件是否为textboxc in grpParameterSet如果是清除整个form中的,则改成this.Controls) if (c.GetType().ToString().Contains(TextBox) (TextBox)c).Text = ; if (c.GetType().ToString().Contains(ComboBox) (ComboBox)c).Text = ; /*if (c.GetType().ToString().Contains(CheckBox) (CheckBox)c).Checked = false; */ c#之字符串与数值之间的转换
7、#中不仅仅存在数值类型的数据之间的转换,字符串和数值之间也是可以互相转换的,只是方法不同而已。1 数值型转换为字符型数值型数据转换为字符串用ToString()方法即可实现int num1=10string mynum=num1.ToString();2 字符串转换为数值型字符串数据转换为数值型使用Pares()方法字符串转换为整型用int.Pares()string str=13;int number=int.Pares(str);字符串转换为双精度浮点型double.Pares()stringstring str=14;double number =double.Pares(str);字符
8、串转换为单精度浮点型float.Parse(string)string str=15;float number=float.Pares(str);不是认识字符串都可以转换为数值型数据,只有能够表示成数字的字符串才可以进行转换,例如名字“张三”,转换成数字没有可以符合的表达式,就不能实现转换。注意 Pares() 括号中的参数只能是字符串,不能为其他数据类型。c#之判断TextBox是否为空if (TextBox.Text=)c#之限制TextBox中输入的字符串为16进制符号,即0-9,a-f或A-F。1.从键盘限制PublicFunctionValiText(KeyInAsInteger,V
9、alidateStringAsString)AsInteger在需要限制输入的控件的KeyPress加入代码:Keyascii=ValiText(Keyascii,0123456789ABCDEF)第二个参数0123.CDEF中有的字符(大小写不敏感)通过,其它不希望的字符过滤掉DimValidateListAsString,KeyOutAsIntegerValidateList=UCase(ValidateString)&Chr(8)允许使用BackSpace键IfInStr(1,ValidateList,UCase(Chr(KeyIn),1)0ThenKeyOut=KeyInElseKey
10、Out=0:BeepValiText=KeyOutEndFunction2 对输入的数据进行判断,不符合要求则重新输入先 string字符串转换成char数组:stringstr=iamastudent;charstrch=str.ToCharArray();再逐个判断C#16进制与字符串、字节数组之间的转换(转)串口开发用1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串/十进制转二进制Console.WriteLine(十进制166的二进制表示: +Convert.ToString(166, 2);/十进制转八进制Console.WriteLine(十进制166的八进制表示: +
11、Convert.ToString(166, 8);/十进制转十六进制Console.WriteLine(十进制166的十六进制表示: +Convert.ToString(166, 16);/二进制转十进制Console.WriteLine(二进制 111101 的十进制表示: +Convert.ToInt32(111101, 2);/八进制转十进制Console.WriteLine(八进制 44 的十进制表示: +Convert.ToInt32(44, 8);/十六进制转十进制Console.WriteLine(十六进制 CC的十进制表示: +Convert.ToInt32(CC, 16);2
12、.在串口通讯过程中,经常要用到 16进制与字符串、字节数组之间的转换/private string StringToHexString(string s,Encoding encode)byte b = encode.GetBytes(s);/按照指定编码将string编程字节数组string result = string.Empty;for (int i = 0; i b.Length; i+)/逐字节变为16进制字符,以%隔开result += %+Convert.ToString(bi, 16);return result;private string HexStringToStrin
13、g(string hs, Encoding encode)/以%分割字符串,并去掉空字符string chars =hs.Split(new char%,StringSplitOptions.RemoveEmptyEntries);byte b = new bytechars.Length;/逐个字符变为16进制字节数据for (int i = 0; i chars.Length; i+)bi = Convert.ToByte(charsi, 16);/按照指定编码将字节数组变为字符串return encode.GetString(b);字符串转16进制字节数组/字符串转16进制字节数组/pr
14、ivatestaticbyte strToToHexByte(stringhexString)hexString=hexString.Replace(,);if(hexString.Length%2)!=0)hexString+=;byte returnBytes=newbytehexString.Length/2;for(inti=0; ireturnBytes.Length; i+)returnBytesi=Convert.ToByte(hexString.Substring(i*2,2),16);returnreturnBytes;字节数组转16进制字符串/字节数组转16进制字符串/pu
15、blicstaticstringbyteToHexStr(byte bytes)stringreturnStr=;if(bytes!=null)for(inti=0; ibytes.Length; i+)returnStr+=bytesi.ToString(X2);returnreturnStr;从汉字转换到16进制/从汉字转换到16进制/编码,如utf-8,gb2312/是否每字符用逗号分隔/publicstaticstringToHex(strings,stringcharset,boolfenge)if(s.Length%2)!=0)s+=;/空格/throw new ArgumentE
16、xception(s is not valid chinese string!);System.Text.Encoding chs=System.Text.Encoding.GetEncoding(charset);byte bytes=chs.GetBytes(s);stringstr=;for(inti=0; ibytes.Length; i+)str+=string.Format(0:X, bytesi);if(fenge&(i!=bytes.Length-1)str+=string.Format(0,);returnstr.ToLower();16进制转换成汉字/从16进制转换成汉字/
17、编码,如utf-8,gb2312/publicstaticstringUnHex(stringhex,stringcharset)if(hex=null)thrownewArgumentNullException(hex);hex=hex.Replace(,);hex=hex.Replace(n,);hex=hex.Replace(,);hex=hex.Replace(,);if(hex.Length%2!=0)hex+=20;/空格/需要将 hex 转换成 byte 数组。byte bytes=newbytehex.Length/2;for(inti=0; ibytes.Length; i+
18、)try/每两个字符是一个 byte。bytesi=byte.Parse(hex.Substring(i*2,2),System.Globalization.NumberStyles.HexNumber);catch/Rethrow an exception with custom message.thrownewArgumentException(hex is not a valid hex number!,hex);System.Text.Encoding chs=System.Text.Encoding.GetEncoding(charset);returnchs.GetString(b
19、ytes);C#combobox中设置dropdownstyle为dropdownlist,清空dropdownlist显示的值, 而不是删除items中值的方法把 SelectedIndex 设置为 -1C里面的#pragmaweak的含义清空StringBuilder的三种方法及效率大家知道对于字符串频繁拼接是使用stringbuilder.Append方法比使用string+=方法效率高很多,但有时需要清空stringbuilder时却不知道怎么清空,因为它没有clear或empty的方法。那用什么方法呢?在网上搜了一下大概一下三种方法。1、Remove例: StringBuilder
20、val = new StringBuilder(); val.Append(.); val.Remove(0,val.Length);/清空2、Replace StringBuilder val = new StringBuilder(); val.Append(.); val.Replace(val.ToString(), );/清空3、Length StringBuilder val = new StringBuilder(); val.Append(.); val.Length = 0;/清空对于这三种方法的效率简单做了一下测试,测了三次求的平均值测试方法: DateTime dt =
21、DateTime.Now; const int testNum = 1000000; StringBuilder strbuilder = new StringBuilder(); for (int i = 0; i testNum; i+) strbuilder.Append(test); strbuilder.Remove(0,strbuilder.Length); Console.WriteLine(Rsemove:+(DateTime.Now - dt).Ticks);第一种用时间:366687第二种用时间:1186734第三种用时间:180010可见还是使用length方法比较效率。
22、C# 延时小函数 很好用平时我们在做winform开发的时候,有时候需要让程序休眠几秒钟,但是,如果我们直接使用 thread.sleep()函数,页面ui就会停止响应。怎么样解决呢,你可以把页面涉及到表现ui的代码放到一个单线程处理,也可以采用我下面的做法,加一个小函数ok了。测试过很好用。public static bool Delay(int delayTime) DateTime now = DateTime.Now; int s; do TimeSpan spand = DateTime.Now - now; s = spand.Seconds; Application.DoEven
23、ts(); while (s /这里还可以处理些比较耗时的事情。 Thread.Sleep(1000);/休眠时间 this.Dispatcher.Invoke(new Action() = DoSomeThing();/调用处理事件 ); ); /休眠后你要做的事情 void DoSomeThing() C#中全局变量应该定义在哪里?写到类里面,方法体外面,如果你要在其他类调用 那就写成静态的例如:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using
24、System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace FormT public partial class Form1 : Form private float X;/全局变量 private float Y;/全局变量 public Form1() InitializeComponent(); / 将?控?件t的?宽,?高?,?左边?距,?顶边?距和字?体?大小?暂Y存?到?tag属?性?中D / / 递Y归控?件t中D的?控?件t private void setTag
25、(Control cons)/自己定义的方法 foreach (Control con in cons.Controls) con.Tag = con.Width + : + con.Height + : + con.Left + : + con.Top + : + con.Font.Size; if (con.Controls.Count 0) setTag(con); /根据Y窗体?大小?调整?控?件t大小? private void setControls(float newx, float newy, Control cons) /自己定义的方法 /遍历窗体?中D的?控?件t,?重?新
26、?设置?控?件t的?值 foreach (Control con in cons.Controls) string mytag = con.Tag.ToString().Split(new char : );/获?取?控?件t的?Tag属?性?值,?并分?割?后存?储字?符?串?数y组 float a = System.Convert.ToSingle(mytag0) * newx;/根据Y窗体?缩?放?比例y确定控?件t的?值,?宽度 con.Width = (int)a;/宽度 a = System.Convert.ToSingle(mytag1) * newy;/高?度 con.Heig
27、ht = (int)(a); a = System.Convert.ToSingle(mytag2) * newx;/左边?距离? con.Left = (int)(a); a = System.Convert.ToSingle(mytag3) * newy;/上?边?缘距离? con.Top = (int)(a); Single currentSize = System.Convert.ToSingle(mytag4) * newy;/字?体?大小? con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Fon
28、t.Unit); if (con.Controls.Count 0) setControls(newx, newy, con); private void Form1_Load(object sender, EventArgs e) X = this.Width;/获?取?窗体?的?宽度 Y = this.Height;/获?取?窗体?的?高?度 setTag(this);/调用?方?法 private void Form1_Resize(object sender, EventArgs e) float newx = (this.Width) / X; /窗体?宽度缩?放?比例y float
29、 newy = (this.Height) / Y;/窗体?高?度缩?放?比例y setControls(newx, newy, this);/随?窗体?改?变?控?件t大小? statusStrip1状态栏控件不见了,但是上面的label还在,但是再form里面不显示,重新添加这些label还不能重新命名,解决方法:把Designer.CS中相关label的代码都删掉再重新添加label并修改属性。C#在插拔USB后怎么检测新的串口号?当设备被插入/拔出的时候,WINDOWS会向每个窗体发送WM_DEVICECHANGE消息,当消息的wParam 值等于DBT_DEVICEARRIVAL时,
30、表示Media设备被插入并且已经可用;如果wParam值等于DBT_DEVICEREMOVECOMPLETE,表示Media设备已经被移出。它们的lParam都指向一个DEV_BROADCAST_HDR结构体,其原形如下:1typedefstruct_DEV_BROADCAST_HDR23DWORDdbch_size;4DWORDdbch_devicetype;5DWORDdbch_reserved;6DEV_BROADCAST_HDR,*PDEV_BROADCAST_HDR;这个结构体仅仅是一个“头”(HDR),其后还有附加数据,dbch_size表示结构体实例的字节数,当其中的dbch_d
31、evicetype字段值等于DBT_DEVTYP_VOLUME时,表示当前设备是逻辑驱动器,且lParam实际上指向的应该是DEV_BROADCAST_VOLUME结构体实例(真佩服这种逻辑),DEV_BROADCAST_VOLUME结构体原形如下:1typedefstruct_DEV_BROADCAST_VOLUME2DWORDdbcv_size;3DWORDdbcv_devicetype;4DWORDdbcv_reserved;5DWORDdbcv_unitmask;6WORDdbcv_flags;7DEV_BROADCAST_VOLUME,*PDEV_BROADCAST_VOLUME;其
32、中dbcv_unitmask字段表示当前改变的驱动器掩码,第一位表示驱动器号A,第二位表示驱动器号B,第三位表示驱动器号C,以此类推dbcv_flags表示驱动器的类别,如果等于1,则是光盘驱动器;如果是2,则是网络驱动器;如果是硬盘、U盘则都等于0所以,我只需要在程序中捕捉WM_DEVICECHANGE消息,然后根据具体情况去处理即可,下面是我的测试代码:usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.D
33、ata;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceUDiskDetectpublicpartialclassForm1:FormpublicForm1()InitializeComponent();privatevoidForm1_Load(objectsender,EventArgse)StructLayout(LayoutKind.Sequential)structDEV_BROADCAST_HDRpublicUInt32dbch_size;publicUInt32dbch_devicet
34、ype;publicUInt32dbch_reserved;StructLayout(LayoutKind.Sequential)structDEV_BROADCAST_VOLUMEpublicUInt32dbcv_size;publicUInt32dbcv_devicetype;publicUInt32dbcv_reserved;publicUInt32dbcv_unitmask;publicUInt16dbcv_flags;protectedoverridevoidDefWndProc(refMessagem)if(m.Msg=0x0219)/WM_DEVICECHANGEswitch(m
35、.WParam.ToInt32()case0x8000:/DBT_DEVICEARRIVALDEV_BROADCAST_HDRdbhdr=(DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam,typeof(DEV_BROADCAST_HDR);if(dbhdr.dbch_devicetype=0x00000002)/DBT_DEVTYP_VOLUMEDEV_BROADCAST_VOLUMEdbv=(DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam,typeof(DEV_BROADCAST_V
36、OLUME);if(dbv.dbcv_flags=0)AddVolumes(GetVolumes(dbv.dbcv_unitmask);break;case0x8004:/DBT_DEVICEREMOVECOMPLETEDEV_BROADCAST_HDRdbhdr=(DEV_BROADCAST_HDR)Marshal.PtrToStructure(m.LParam,typeof(DEV_BROADCAST_HDR);if(dbhdr.dbch_devicetype=0x00000002)/DBT_DEVTYP_VOLUMEDEV_BROADCAST_VOLUMEdbv=(DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam,typeof(DEV_BROADCAST_VOLUME);if(dbv.dbcv_flags=0)RemoveVolumes(GetVolumes(dbv.dbcv_unitmask);break;base.DefWndProc(refm);/根据驱动器掩码返回驱动器号数组/掩码/返回驱动器号数组publicsta
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年地方碳排放总量和强度指标分解落实方案模板
- 2026届湖北省马坪镇中学心中学高中毕业班阶段性测试(四)化学试题含解析
- 2026年AI医疗数据安全隐私合规授权机制建设
- 2026年大湾区多层次轨道交通互联互通与便捷换乘一体化设计指南
- 2026年煤炭应急储备基地建设与运营管理模式创新方案
- 服务热线服务质量评估体系
- 京东分拣系统升级与效率提高
- 金融风控模型构建关键因素剖析
- 银行风险管理部工作计划及执行方案
- 红星美凯龙家居顾问面试要点与策略
- TCPA 005-2024 星级品质 婴儿纸尿裤
- 桩基承载力优化设计研究
- DJ公主岗位职责
- 多联机安装全过程经典技术指导手册
- 龙虎山正一日诵早晚课
- 排球基础理论 【核心知识精讲精析】 高一上学期体育与健康人教版必修第一册
- 医院课件:《规范医疗服务收费行为培训》
- YY/T 1836-2021呼吸道病毒多重核酸检测试剂盒
- GB/T 32291-2015高压超高压安全阀离线校验与评定
- 煤矿掘进顶板管理
- 邹申写作教程Units-课件
评论
0/150
提交评论