有些事情即便想起来了也会忘掉去做啊!

啊说起来我某次在学校打开了我的List页 简直被丑哭了(因为当时写CSS忘记考虑字体什么的)

然后心里就想着一定要找个时间去改一下什么的

说起来这一想就是好几个月

然后最后发展成为“唉我好像有什么事情忘记做了”的样子

然后想啊想 想啊想

某日又想起来“啊我想起来我什么没做了!明天一定要找个时间补上啊!”

什么的

然后最后又是不了了之 怎么进入一个奇怪的死循环了啊XD

真是讨厌啊

说起来 我才不会用备忘录这种东西呢 坚决不用!

因为麻烦(x

嗯……明天一定要记得去把那个List页的CSS改掉()

年末

又到年末了

晃荡着2016就这样子过去了

福州的冬天简直就是说来就来 冷的要死

而且因为是沿海 湿度很大 穿再多的衣服都木有什么用的样子

简直就是要命啊

想要写点总结什么的 然而写不来

反正我双11和双12都没有买东西 是不是超厉害

然后十二月后面就是补齐一些DEMO加笔记以及一些形式性的总结什么的就好了

另外以一个非主流专科生的身份收获了国职赛市一等奖和省二等奖什么的

好像没什么了不起的

还是原来那么渣

PHP和Python都忘光光了 真是令人烦恼啊

另外VS出了17RC和Mac Beta真是令人惊讶

还有多说最近都有垃圾评论了 真是令人讨厌啊

大概就是这样吧

C# WinForm MDI父窗口子窗口控件互操作

在窗体中定义一个 用于存放当前窗体的对象

public static MDIParent1 mdiwin = null;

然后 将他初始化

mdiwin = this;

然后 就可以通过

主窗体类名. mdiwin

在子窗体来操作主窗体对象了 例如

MDIParent1.mdiwin.Text = "Hello World!";

到这里 还没有全部完成 你会发现 只能操作窗体对象主体 无法操作控件
还需要将我们要将要操作的控件的 modifiers 属性 设为 public
或在Designer.cs中将访问符手动从 private 改为 public
如果需要使用变量的话 也可以在变量前加 public 解决 例如

public int i = 0;

设置之后 就可以正常操作控件了 例如

MDIParent1.mdiwin.label1.Text = "Hello!";

以上 父窗体操作子窗体同理

但这并不是一个好的方法 因为在调用时 他将破坏封装 你可以把它封装成方法后再进行使用


拓展与参考资料:http://blog.csdn.net/max01/article/details/1869008

Bizideal Zigbee V24 SDK C#开发手记(3)

RFID与之前部分较为相似
依旧需要引用库
也需要实例化命名控制 此处有些不同

BIControllerManager ControllerRfid = new BIControllerManager(new BIRFIDProtocol());//生成控制实例,并指定相关协议。BIRFIDProtocol射频RFID协议。

开始接收

this.ControllerRfid.PacketReceived += ctrlrfid_PacketReceived;this.ctrlrfid.OpenPort(this.cmbRfid.Text, 9600, Parity.Even, 8, StopBits.One);//射频(RFID)串口号,波特率是9600,偶校验,数据位8,停止位1this.ctrlrfid.StartReceiver();

处理接收到的数据

void ctrlrfid_PacketReceived(object sender, BIPacketReceivedEventArgs e){ //添加新建一个线程 防止用户界面卡死 this.BeginInvoke(new Action(() => { //解析数据包 BIRfidUpgoingPacket Packet = BIRfidUpgoingPacket.ParseFromBinary(e.BinaryData); if (Packet != null) { byte channel = Packet.AntennaChannel; //如果读取成功 if (Packet.TagCardState == BizIdeal.Data.BIRFIDTagReadResult.Succeeded) { //如果包为标签 if (Packet.DataList[0].SensorType==BISensorType.RFID_15693_Tag) { this.lblId.Text = Packet.TagID; } //如果包为数据 if (Packet.DataList[0].SensorType == BISensorType.RFID_15693_Data) { this.txtData.Text = BitConverter.ToString(Packet.BlockData); } } //如果没有读到 else if (Packet.TagCardState == BIRFIDTagReadResult.NoCard) { this.lblId.Text = "NoCard"; this.txtData.Text = "00-00-00-00"; } else if (Packet.TagCardState == BIRFIDTagReadResult.Error) { this.lblId.Text = "Error"; this.txtData.Text = "00-00-00-00"; } } }), null);

读取标签

this.ctrlrfid.RFID.ReadTag(0xffff, 0, BIRfidReadMode.Manual15693);//第一位短地址 此处使用广播//第二位通道//第三位读取模式,手动 //BIRfidReadMode.Auto15693(自动模式)

读取数据

this.ctrlrfid.RFID.ReadDataBlock(0xffff, 0, 0, BIRfidReadMode.Manual15693);//第一位短地址//第二位通道//第三位数据块//第四位读取模式,手动

写入数据

this.ctrlrfid.RFID.WriteDataBlock(0xffff, 0, 0, data);//第一位短地址//第二位通道//第三位数据块//第四位数据内容

C# WinForm 界面相关(杂-1)

设置窗体整体透明度

this.Opacity = 0.1;

设置窗体Background为透明

this.BackColor = Color.White;this.TransparencyKey = Color.White;

隐藏窗体标题栏和边框

this.FormBorderStyle = FormBorderStyle.None;

一个例子

double i = 1.0;private void timer1_Tick(object sender, EventArgs e){i = i - 0.1;this.Opacity = i;}

C# WinForm MDI窗体基本使用

在父窗体中显示子窗体

Form1 f1 = new Form1();f1.MdiParent = this;f1.Show();

水平平铺各窗体

LayoutMdi(MdiLayout.TileHorizontal);

垂直平铺各窗体

LayoutMdi(MdiLayout.TileVertical);

层叠排列各窗口

LayoutMdi(MdiLayout.Cascade);

排列各窗口

LayoutMdi(MdiLayout.ArrangeIcons);

C#中操作MS SQL

先要对相关的库进行引用

using System.Data.Sql;using System.Data.SqlClient;using System.Data.SqlTypes;

实例化命名连接

SqlConnection sqlCon;

打开连接

sqlCon.Open();

然后连接数据库

string sqlinfo = @"Data Source=(localdb)\v11.0;Initial Catalog=Demo1;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False";sqlCon = new SqlConnection(sqlinfo);

查询数据库

SqlDataAdapter select = new SqlDataAdapter("select * from _Users", sqlcon);select.SelectCommand.ExecuteNonQuery();

执行语句

SqlDataAdapter update = new SqlDataAdapter("Update _Users set _='admin' where _Id = 1", sqlcon);update.SelectCommand.ExecuteNonQuery();

最后 操作完之后记得断开与数据库的连接 节省资源

sqlCon.Close()

SQL 基本操作语句-查增删改

查询所有

select * from 表名

条件查询

select * from 表名 where 条件

增加新行

insert into 表名 values('列一内容','列二内容','列三内容')

修改信息

update 表名 set 内容 where 条件

删除信息

delete from 表名 where 条件


例子:条件写法

delete from _Table where _Id = 1

需要注意

  • 语句中字符串需要使用英文单引号 ‘ ‘ 形如
  • 'Text'
  • 列名表名最好使用下划线 _ 作为开头 形如
  • _Users

Bizideal Zigbee V24 SDK C#开发手记(2)

当多块节点板连接同一个协调器的时候 可能会出现返回数值不正常的情况

这可能是由于烧写不当所导致的 可以通过接受数据时添加一个条件来解决

for (int i = 0; i < Packet.DataList.Count; i++){if (Packet.DataList[i].SensorType == BISensorType.OnBoardHumiditySensor_SHT10 && shortAddress == 38400){Single Humidity = Packet.DataList[i].GetFloatValue();}}

此外烧录时需要注意不能出现BoardID相同的情况

当多块节点板连接同一个协调器的时候 也有可能出现控制不灵的情况

这可能是获取到的短地址并非需要控制的节点板的短地址的原因

可以通过设定固定的短地址来解决

ushort shortAdsress = 38400;Controller.DCMotor.SetAction(shortAddress, BIDCMotorAction.Stop);

Bizideal Zigbee V24 SDK C#开发手记(1)

在开发时需要引用 BIControlManager.dll BIData.dll BIProtocols.dll三个库 并且在代码主体前引用。

using BizIdeal.Data; using BizIdeal.Protocols; using BizIdeal.Protocols.Packets; 

实例化命名控制

BIControllerManager con = new BIControllerManager(new BI25sProtocol());

打开端口 订阅接收的包 开始接收

con.OpenPort(comboBox1.Text, 38400, Parity.Even, 8, StopBits.One);//打开端口("串口(注意大写)",波特率,校验位(为偶),链表,停止位)con.PacketReceived += con_PacketReceived;con.StartReceiver();

为了保证连接和传输的稳定性最好不要使用

DataReceived

改为使用

PacketReceived

可以使用for循环来比对数据包中的传感器类型 以便获取传感器的数据

for (int i = 0; i < Packet.DataList.Count; i++){}

可以在上述的for循环中通过if语句比较来判断并获取传感器类型和获取数据

if (Packet.DataList[i].SensorType == BISensorType.OnBoardHumiditySensor_SHT10){ Single Humidity = Packet.DataList[i].GetFloatValue();}

可以通过将Single设为公共变量 并且添加到Timer中 实现实时刷新

private void timer_Tick(object sender, EventArgs e){ Humidity_Lable.Text = Convert.ToString(Humidity);}