新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
嗯,上周没写,在书店看了一夜的书,第二天睡了一天。
目前创新互联建站已为上千的企业提供了网站建设、域名、雅安服务器托管、网站运营、企业网站设计、祁东网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
最近项目开发的差不多了(其实是在没有服务和设备的情况下开发程序......),不过还好这两天设备终于到了。
就目前的开发情况自问自答的写一点心得,这其中一部分可以用于Winform开发。
问:关于DataGrid的使用和重绘
答:这个在之前的文章中给了一位大神重绘DataGrid的示例,本来我也想也一个差不多的然后放上来,不过看起来又要延后了。
问:如何实现输入指定文本(如只接受数字,只接受正整数等),并在有错误输入的时候能够回退到输入之前的状态
答:首先页面要有一个缓存变量,然后在文本框的Text_Change事件里对缓存变量赋值,在有错误输入的时候将缓存变量赋值给文本框,就能实现回退
//全局缓存变量 private string strtextbox1 = string.Empty; //文本改变事件 private void textBox1_TextChanged(object sender, EventArgs e) { //判断是否为正整数 if (!string.IsNullOrEmpty(this.textBox1.Text) && !Regex.IsMatch(this.textBox1.Text, @"^[0-9]\d*$")) { //退回 this.textBox1.Text = this.strtextbox1; MessageBox.Show("Error Input"); } else { //赋值 this.strtextbox1 = this.textBox1.Text; } }
问:如何获得WinCE设备上扫描到的数据
答:就目前我所知道的有两种,一种是通过硬件厂商提供的SDK,通过扫描事件获得数据,这个方法的缺点是一旦更换成不同品牌的扫描设备就要修改代码,所以非常麻烦;另一种就是焦点获取数据,这种是最简单的,最方便的(我是这样认为的),这个功能由硬件厂商提供,当扫描功能开启时,扫描到的数据会直接注入到目前焦点所在的地方(例如目前选中的文本框),如果没有焦点,一般会出现一个Demo,提示你无需调用SDK就可以将获取数据之类的说明,其具体的原理,貌似是和键盘输入一样。这个方法的问题在于控件焦点的控制。
问:扫描到的数据是怎么注入到文本框中的?
答:就目前我所知道的情况,和键盘输入一样,是一个一个字符添加到文本框的,所以每添加一次就会触发一次Text_Change事件,例如扫描到的数据是一个长度为10的字符串,就会触发10次Text_Change事件。
问:对于扫描到的数据的控制
答:因为目前项目中要求扫描到的数据必须经过后台转换才能显示,所以,不能直接显示扫描到的数据。目前我的解决方法有两个。不过首先要设置扫描器在每次扫描的结果后面加一个回车键,这样代表结束,便于判断。
一个方法是在文本框的Text_KeyPress事件中判断输入的字符是不是回车键,如果是,则获得文本框数据,然后到后台查询转换成对应的数字,然后将该数值赋值到文本框中,所有操作在事件中进行,这个方法的确定是,如果后台服务比较卡,可能会导致客户看到不应该显示的数据。
另一个则是我从网上查到的,首先将页面的KeyPreview设置为true,然后在页面上的KeyPress事件中捕获筛选所需的文本。这样做的好处是只有在全部处理结束后才显示文本,不会让客户看到错误的数据。
//处理扫描数据的方法 private string Handle(string str) { return str; } //全局缓存变量 private string strtextbox2 = string.Empty; //窗体按键事件 private void Form1_KeyPress(object sender, KeyPressEventArgs e) { //判断是否是指定控件处于焦点状态 if (this.textBox2.Focused) { //判断输入的是不是回车键 if (e.KeyChar == (char)Keys.Enter) { //对迄今为止获得的缓存数据传回后台处理 //然后赋值给页面显示 this.textBox2.Text = Handle(strtextbox2); //清空缓存 strtextbox2 = string.Empty; } else { //累积添加到缓存变量中 strtextbox2 += e.KeyChar; } //代表事件到此结束,不在向下传递 e.Handled = true; } }
好吧,暂时先这样,以后想到什么再补充。
认真活好每一天!