求教关于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就不进到这个函数,这时怎回事?


...全文
499 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
  • 打赏
  • 举报
回复
没人来吗 求高手啊
内容概要:本文聚焦于分布式传感器网络中的LEACH(Low-Energy Adaptive Clustering Hierarchy)聚类算法,系统研究其在能量消耗建模与网络生命周期优化方面的性能表现,并结合Matlab代码实现完整的仿真分析流程。研究深入剖析LEACH协议的核心机制,即通过周期性选举簇头节点实现能量负载的均衡分布,从而有效延长网络整体生存时间。内容涵盖传感器节点部署优化、通信能耗模型构建、路由策略设计及能量耗尽过程的动态模拟,重点解决传统LEACH算法中存在的簇头分布不均、能耗集中于特定区域等缺陷。文档不仅提供了LEACH及其改进算法的仿真案例,还拓展至智能优化算法、机器学习、信号处理等多学科交叉应用方向,体现了该研究在物联网、边缘计算和无线传感网络领域的广泛适用性与科研价值。; 适合人群:具备一定编程基础和科研能力,熟悉Matlab仿真环境,从事无线传感器网络、物联网、智能优化算法等相关领域的研究生或科研人员。; 使用场景及目标:①用于无线传感器网络中能量高效路由协议的设计与优化;②通过Matlab仿真实现LEACH算法及其改进版本的性能对比分析;③支撑科研论文复现、算法验证与教学演示;④为分布式系统中的能耗均衡问题提供解决方案参考。; 阅读建议:建议读者按照文档提供的目录结构系统学习,重点关注LEACH算法的核心机制与能量模型构建,结合所提供的Matlab代码进行仿真实践,并参考网盘资源中的完整案例以加深理解。同时可拓展至其他优化算法与通信协议的研究,提升综合科研能力。
内容概要:本文针对电力系统中考虑N-1故障集的安全约束经济调度(SCED)问题,提出了一种兼顾系统安全性与经济性的优化建模方法,并提供了基于Matlab的代码实现。N-1故障集指系统中任一关键元件(如输电线路或发电机)发生故障退出运行的情形,确保在此类故障下系统仍能安全稳定运行是调度决策的核心要求。所构建的SCED模型在满足功率平衡、机组出力能力和线路传输容量等基本物理约束的基础上,进一步引入N-1故障后的安全校验约束,通过优化算法求解出一组既能维持系统安全稳定又可实现发电成本最小化的机组调度方案。该研究对于提升电网韧性、保障供电可靠性以及支撑现代电力系统的安全经济运行具有重要的理论价值与实践意义。; 适合人群:具备电力系统分析、运筹优化理论基础及Matlab编程能力的高校研究生、科研人员和电力行业相关技术人员。; 使用场景及目标:①深入理解安全约束经济调度(SCED)的基本原理与数学建模流程;②掌握N-1安全准则在优化模型中的具体建模方法与实现逻辑;③获取可复现、可调试的Matlab代码实例,用于教学示范、科研复现或作为进一步开发复杂调度模型的基础。; 阅读建议:建议读者结合文档内容与配套代码,重点关注模型中关于N-1故障场景的处理机制与约束构建方式,通过逐步调试与仿真分析,深化对目标函数、决策变量与多重安全约束之间耦合关系的理解。

111,129

社区成员

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

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

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