我正试图让一个热键控件在C#中工作,它基于control类和msctlsŠu hotkey32 win32类。我所拥有的一切都是可行的,尽管它并不完美:
class Hotkey : TextBox { protected override CreateParams CreateParams { get { CreateParams parms = base.CreateParams; parms.ClassName = "msctls_hotkey32"; return parms; } } // (some other p/invoke stuff for HKM_SETHOTKEY, etc.) }
优点是它简单有效。缺点是它从TextBox继承了一系列不适用于此控件的功能。所以我的问题是-有没有更好的方法来做到这一点,而不重新发明车轮?
始终可以直接从System.Windows.Forms.Control继承。当然,还要添加您想要支持的特定方法和属性。您需要适当地设置控件样式以使其正常工作,下面是一个简单的示例。
using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { class HotKey : Control { public HotKey() { SetStyle(ControlStyles.UserPaint, false); } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ClassName = "msctls_hotkey32"; return cp; } } } }