问题描述如下:1.我有一个UserCtrol控件,其上有一个Edit控件,我把它放到一个WinForm上,此时,当焦点处于Edit控件时,无法捕捉Winform的Key事件,因此在User控件上自定义了一个时间OnKeyPressed,当Edit控件中发生KeyDown或者KeyUp时触发该用户自定义事件,但在实际使用过程中发现,虽然自定义事件可以被正常出发,但Edit控件中会填入用户按键的字符,例如,当用户按下P时,用户时间被触发,但Edit控件中会被填入字符P,当常按字符P产生一连串的Key时间的时候,不再产生Keyup事件,无法满足实际使用的需要,请教,有没有什么代替方案,可以使Key事件被主窗体处理。如果主窗体不处理该事件,再由用户控件处理。2.我有一个ListCtrl控件,如何使单击ListCtrl的某一行无效,其他则可以。3.有什么好的控件(类似于DataGrid)比较有利于用户输入和编辑数据的,比如用户在第一列输入了一个字符,按下了回车键,程序接受该输入,并将关联的数据填入第二、三列,增加一列,定位光标到第一列,继续接受用户输入。一次问这么多问题,希望大家帮忙解决。

解决方案 »

  1.   

    3.试试ComponentOne的C1TrueDBGrid ,一个比较强大的DataGrid控件
      

  2.   

    你需要增加一个一个自定义事件来传递给主窗体进行处理。
    try
    http://blog.csdn.net/zhzuo/archive/2004/11/30/199599.aspx
      

  3.   

    zhzuo(秋枫) ( ) 
    我使用的正是这种方法,问题是,在主窗体接收到事件以前,文本框中已经会填入你打入的字符了。我需要在字符被自动填入之前由主程序来判断是否要填入。有什么好的建议吗?
      

  4.   

    给分了。。其实很简单只要把e.Handled设置为True就可以了。但是我觉得Microsft也够变态,KeyPress事件有些字符不传递。还要重新派生一个TextBox,然后改写IsInputKey,在里面直接写上return true才行。。