SuperAllen

导航

上一个项目临近测试阶段遇到的问题

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)    收藏  举报