上一个项目临近测试阶段遇到的问题
datagridview回车后移到右边单元格,而不是同一列的下一行。一般来说用以下代码也可以解决问题。
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (this.dataGridView1.Focused && e.KeyCode == Keys.Enter)
{
SendKeys.Send("{Up}");
SendKeys.Send("{Tab}");
}
}
上述代码是在datagridview控件的列允许为空的情况下。当有某列不能为空或为主键列就行不通。此时需要改写datagridview这个控件。代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MySpace { class MyDateGridView: System.Windows.Forms.DataGridView { protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData) { switch (keyData) { case System.Windows.Forms.Keys.Enter: System.Windows.Forms.SendKeys.Send("{TAB}"); // System.Windows.Forms.SendKeys.Send("{UP}"); return true; } return base.ProcessCmdKey(ref msg, keyData); } } }
主要是因为快捷键与菜单快捷方式被称为命令键,命令键也就始终比常规输入键具有优先权。命令键的键盘响应已经被控件封装为protected型了。控件编写人员把多个预定义的键盘绑定方案封装起来,称为快捷键。我们在Keydown/KeyPress中没办法拦截到Enter、SHIFT、CTRL 、ALT 键和其它一些键盘按键正是这个原因。为解决这些问题VS.NET给出了ProcessCmdKey 方法,我们可以通过重写datagridview 的ProcessCmdKey方法来改变其命令键值的相应事件 。
用文件流创建文件的时候,如果路径带有目录,必须确保目录先创建,否则会一直报错,directorynotfoundexception,未找到路径……的一部分。
string folder = System.IO.Path.Combine(Application.StartupPath, "DataImportAndExportFolder");
if (!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);
}
//string filePath = "DataImportAndExportFolder\\"+factoryName+"+"+date.ToString()+".bin";
string filePath = folder+"\\"+ factoryName + "+" + date.ToString() + ".bin";
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
//using(FileStream fs= File.Create(filePath))
{
posted on 2014-05-25 19:34 SuperAllen 阅读(178) 评论(0) 收藏 举报
浙公网安备 33010602011771号