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


...全文
520 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
  • 打赏
  • 举报
回复
没人来吗 求高手啊
内容概要:本文围绕使用Koopman理论识别机器人动力学的非线性系统展开,提出了一种基于数据驱动的方法,通过Koopman算子将复杂的非线性动力学系统映射到高维线性空间,从而实现对机器人系统动态行为的有效建模与辨识。文中系统阐述了Koopman理论的核心思想、观测函数的设计原则以及动态模式分解(DMD)算法在系统辨识中的具体应用,并结合Matlab代码实现了完整的建模与仿真流程。通过仿真实验验证了该方法在处理强非线性机器人系统时的高精度与鲁棒性,展示了其在模型降阶、状态预测、控制器设计等方面的重要应用价值。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事机器人控制、非线性系统建模、数据驱动控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①实现对复杂机器人非线性动力学系统的精确建模与辨识;②为先进控制器(如模型预测控制MPC、线性二次型调节器LQR等)提供高质量的线性化模型支撑;③推动数据驱动方法在实际机电系统与智能机器人中的工程化应用。; 阅读建议:读者应结合所提供的Matlab代码进行动手实践,深入理解Koopman观测函数构造、DMD算法实现及参数调优过程,建议在不同类型的非线性系统上复现并改进算法,以全面提升理论认知与实际应用能力。
内容概要:本文围绕基于MATLAB的风力涡轮机雷达信号仿真展开研究,系统构建了风力涡轮机在雷达探测下的信号模型,实现了仿真数据的生成与特征分析,重点探讨风力涡轮机旋转叶片引起的雷达回波调制、微多普勒效应及杂波特性,进而研究其对雷达目标检测与识别造成的电磁干扰机制。文中结合雷达信号处理技术,提出了有效的杂波抑制与信号分离方法,为提升雷达在风电场环境中的探测性能提供理论支持和技术路径。此外,资源还整合了风电功率预测、风光储系统建模、新能源并网等关联领域的MATLAB/Simulink仿真案例,展现了MATLAB在电力系统、新能源与雷达信号交叉学科中的综合应用价值。; 适合人群:具备一定MATLAB编程基础,从事雷达信号处理、新能源系统仿真、电力电子与电力系统、电磁兼容性研究等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于风力涡轮机对雷达系统电磁干扰的建模、仿真分析与教学演示;②为雷达杂波建模、微多普勒特征提取、信号去噪与运动目标检测算法开发提供仿真数据支持;③辅助新能源与雷达系统共存场景下的多物理场耦合仿真与干扰规避策略研究。; 阅读建议:建议结合文中提供的完整MATLAB仿真代码与数据集进行实践操作,重点关注风力涡轮机动态特性与雷达信号调制之间的耦合关系,深入理解微多普勒特征的生成机理,并可拓展学习所附的其他新能源与信号处理仿真案例,以增强跨学科综合仿真与问题解决能力。
内容概要:本文针对风光储共母线微电网在源荷随机扰动下的稳定运行问题,提出了一种分层协调控制策略与储能系统高频低频功率解耦方法,并通过Simulink仿真平台进行系统建模与验证。研究构建了包含风电、光伏与混合储能的微电网系统模型,设计了上层能量管理与下层设备控制相结合的分层控制架构,实现了多源系统的协调调度;同时,为优化储能系统的功率分配与延长其使用寿命,提出了基于分频控制的功率解耦策略,将负荷功率动态划分为高频与低频成分,分别由超电容和蓄电池承担,充分发挥不同储能介质的动态响应特性。研究还通过多种扰动工况下的仿真实验,系统分析了系统的动态响应特性,验证了所提策略在抑制功率波动、提升系统稳定性及改善储能系统运行效率方面的有效性。; 适合人群:具备电力系统、新能源、自动化等相关专业背景,从事微电网、分布式能源系统、储能控制等领域研究的研发人员及研究生。; 使用场景及目标:①掌握微电网分层控制体系的设计原理与实现路径;②深入理解混合储能系统在多源协调控制中的作用机制及基于分频的功率分配策略;③学习并应用Simulink工具开展微电网系统的建模、仿真与控制策略验证,服务于科研项目攻关或工程方案设计。; 阅读建议:此资源结合理论分析与仿真实践,建议读者在理解控制策略与分频解耦原理的基础上,动手搭建Simulink模型,结合参数调试与仿真结果分析,深入掌握微电网协调控制与储能优化运行的关键技术细节。

111,128

社区成员

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

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

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