求教关于datagridview回车换行的问题,我重载了ProcessDialogKey()函数但是不管用

走你_ 2013-08-23 04:27:42
datagridview回车会自动换行,我不想让他换行,去网上查了下
有说重载ProcessDialogKey函数的我试了试,遇到个奇怪的问题



public class MyDataGridView : DataGridView
{
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.E || keyData == Keys.Enter || keyData == Keys.I)
//上面一条做实验 条件是判断e,i,回车
{
MessageBox.Show("123");

return true;
}
return base.ProcessDialogKey(keyData);
}[code=csharp]


}
[/code]
我按上边那么些,当按下E和I的时候 成功弹出对话框“123”,但是我按回车就毫无反应,
我在这个函数中加断点,执行的时候发现按E和I可以进入函数,我按回车干脆都没有进入过
ProcessDialogKey这个函数,也就是说我按回车根本就没调用过这个函数,求解为什么会这样
我看到datagridview的定义里还有一些函数例如:

ProcessEnterKey(Keys keyData);
ProcessF2Key(Keys keyData);
ProcessEscapeKey(Keys keyData);

这些函数不允许重载,难道datagridview对不同的按键做单独处理吗?

------------------------------------
下边是问题2: 下边是dataGridView的KeyPress函数

private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar ==(char) Keys.E)
{
MessageBox.Show("e");
}
if (e.KeyChar ==(char) Keys.Enter)
{
MessageBox.Show("enter");
}
}

我按回车会进到这个函数,跟上边的完全反过来我按E就不进到这个函数,这时怎回事?


...全文
522 9 打赏 收藏 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
走你_ 2013-08-30
  • 打赏
  • 举报
回复
引用 7 楼 guwei4037 的回复:
[quote=引用 5 楼 beyond789654 的回复:] [quote=引用 3 楼 guwei4037 的回复:] 问题1:可以重写OnKeyPress方法,获得上述按键。
 protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
            //上面一条做实验 条件是判断e,i,回车
            {
                MessageBox.Show("123");
            }
            base.OnKeyPress(e);
        }
OnKeyPress是在哪定义的 我看datagridview里没有这个函数啊[/quote]
public partial class CustomControl1 : DataGridView
    {
        public CustomControl1()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }

        protected override bool ProcessDialogKey(Keys keyData)
        {
            return base.ProcessDialogKey(keyData);
        }

        protected override bool ProcessDataGridViewKey(KeyEventArgs e)
        {
            return base.ProcessDataGridViewKey(e);
        }

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
            //上面一条做实验 条件是判断e,i,回车
            {
                MessageBox.Show("123");
            }
            base.OnKeyPress(e);
        }
    }
都有的,你得细心点看。[/quote]我搞定了 最后是重载了ProcesCmdKey
走你_ 2013-08-23
  • 打赏
  • 举报
回复
引用 7 楼 guwei4037 的回复:
[quote=引用 5 楼 beyond789654 的回复:] [quote=引用 3 楼 guwei4037 的回复:] 问题1:可以重写OnKeyPress方法,获得上述按键。
 protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
            //上面一条做实验 条件是判断e,i,回车
            {
                MessageBox.Show("123");
            }
            base.OnKeyPress(e);
        }
OnKeyPress是在哪定义的 我看datagridview里没有这个函数啊[/quote]
public partial class CustomControl1 : DataGridView
    {
        public CustomControl1()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }

        protected override bool ProcessDialogKey(Keys keyData)
        {
            return base.ProcessDialogKey(keyData);
        }

        protected override bool ProcessDataGridViewKey(KeyEventArgs e)
        {
            return base.ProcessDataGridViewKey(e);
        }

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
            //上面一条做实验 条件是判断e,i,回车
            {
                MessageBox.Show("123");
            }
            base.OnKeyPress(e);
        }
    }
都有的,你得细心点看。[/quote] 谢谢你写了这么多 不过我刚刚去实验了一下 发现不管用
base.OnKeyPress(e);
这个函数执行的时候会调用下边这个函数,

private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((int)e.KeyChar == 13)
            {
                MessageBox.Show("成功");
            }
        }
因为dataGridView按回车会自动到下一行,我不想让他下一行,所以想屏蔽这个动作, 我按你的说法 这样写

    public class mydatagrid : DataGridView
    {
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                return;
            }
            else
            {
                base.OnKeyPress(e);
            }
        }
    }
我感觉这样写就是屏蔽掉了

private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
这个函数,但是dataGridView依然换到了下一行
全栈极简 2013-08-23
  • 打赏
  • 举报
回复
引用 5 楼 beyond789654 的回复:
[quote=引用 3 楼 guwei4037 的回复:] 问题1:可以重写OnKeyPress方法,获得上述按键。
 protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
            //上面一条做实验 条件是判断e,i,回车
            {
                MessageBox.Show("123");
            }
            base.OnKeyPress(e);
        }
OnKeyPress是在哪定义的 我看datagridview里没有这个函数啊[/quote]
public partial class CustomControl1 : DataGridView
    {
        public CustomControl1()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }

        protected override bool ProcessDialogKey(Keys keyData)
        {
            return base.ProcessDialogKey(keyData);
        }

        protected override bool ProcessDataGridViewKey(KeyEventArgs e)
        {
            return base.ProcessDataGridViewKey(e);
        }

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
            //上面一条做实验 条件是判断e,i,回车
            {
                MessageBox.Show("123");
            }
            base.OnKeyPress(e);
        }
    }
都有的,你得细心点看。
全栈极简 2013-08-23
  • 打赏
  • 举报
回复
引用 4 楼 beyond789654 的回复:
[quote=引用 2 楼 guwei4037 的回复:] 问题2:一个是e,一个是E,是不同的,你按大写的E就可以了。
Keys枚举类型了没有小写字符啊 ,我这样(int)e.KeyChar == 101,倒是能行,不过还要一个一个字符去看码值是多少 好麻烦啊[/quote] e.KeyChar == 'a' 这样就行了,不用记ascii码。
走你_ 2013-08-23
  • 打赏
  • 举报
回复
引用 3 楼 guwei4037 的回复:
问题1:可以重写OnKeyPress方法,获得上述按键。
 protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
            //上面一条做实验 条件是判断e,i,回车
            {
                MessageBox.Show("123");
            }
            base.OnKeyPress(e);
        }
OnKeyPress是在哪定义的 我看datagridview里没有这个函数啊
走你_ 2013-08-23
  • 打赏
  • 举报
回复
引用 2 楼 guwei4037 的回复:
问题2:一个是e,一个是E,是不同的,你按大写的E就可以了。
Keys枚举类型了没有小写字符啊 ,我这样(int)e.KeyChar == 101,倒是能行,不过还要一个一个字符去看码值是多少 好麻烦啊
全栈极简 2013-08-23
  • 打赏
  • 举报
回复
问题1:可以重写OnKeyPress方法,获得上述按键。
 protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.E || e.KeyChar == (char)Keys.Enter || e.KeyChar == (char)Keys.I)
            //上面一条做实验 条件是判断e,i,回车
            {
                MessageBox.Show("123");
            }
            base.OnKeyPress(e);
        }
全栈极简 2013-08-23
  • 打赏
  • 举报
回复
问题2:一个是e,一个是E,是不同的,你按大写的E就可以了。
走你_ 2013-08-23
  • 打赏
  • 举报
回复
没人来吗 求高手啊
内容概要:本文提出了一种基于高保真电磁暂态仿真的智能电网虚假数据注入攻击(FDIA)数据集构建与影响分析方法,通过PSCAD与MATLAB联合仿真平台,在IEEE标准测试系统(如9节点或39节点系统)上建立精确的电力系统电磁暂态模型,全面模拟系统在正常运行与遭受FDIA攻击下的动态响应过程。该方法能够生成包含电压、电流、功率、频率等多维度电气量的高精度、时间同步的仿真数据集,真实反映攻击对系统暂态稳定性、潮流分布、电压波动及频率响应的影响,尤其适用于构网型/跟网型逆变器、储能系统、分布式能源高比例接入等新型电力系统场景的安全性评估。所构建的数据集具有高真实性、可复现性和强扩展性,为FDIA攻击机理研究、隐蔽性分析、传播路径追踪以及攻击检测算法(如基于机器学习的异常检测模型)的训练与验证提供了坚实的数据基础和技术支撑。; 适合人群:电力系统自动化、智能电网安全、能源互联网等领域的高校研究生、科研人员及工程技术人员,要求具备扎实的电力系统分析理论基础,熟悉PSCAD/EMTDC与MATLAB/Simulink仿真工具的基本操作,了解状态估计、SCADA系统及网络安全基本概念; 使用场景及目标:① 构建高保真的电力系统网络攻击仿真环境,复现FDIA攻击场景;② 生成用于训练、测试和验证FDIA检测模型的标准化高质量数据集;③ 深入分析虚假数据注入对电力系统暂态稳定性和动态行为的影响机理;④ 支持新型电力系统背景下智能电网安全防护技术、韧性提升策略的研究与实验验证; 阅读建议:建议结合文中所述的联合仿真流程,动手搭建PSCAD电磁暂态模型并实现与MATLAB的数据交互,重点关注攻击向量的设计、量测量篡改策略、系统响应特征提取等关键步骤,同时参考提供的资源链接获取完整代码与案例实现,以深化对攻击建模与防御机制的理解。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧