The TextBox property of the DataGridTextBoxColumn is ReadOnly, so you just cannot set a new derived TextBox into it. One solution is to derive a TextBox, and then have it use the derived TextBox in the DataGridTextBoxColumn instead of the 'generic' TextBox that is there. This is the same technique used in our combobox in a column sample. In that sample, the generic textbox was 'replaced' with a combobox. Here, we replace it with a derived TextBox where we can easily override virtual members.
A reasonable question is why not just use the event mechanism of the existing TextBox to modify behavior. Events like KeyPress would allow us to do some things PROVIDED they get hit. Due to the key processing architecture of the FrameWork, for some special keys, these key events are not always fired. And if they are fired, sometimes it is impossible to avoid the default processing if this is the intent you have. Overriding a virtual function, doing something special, and then NOT calling the baseclass is a standard way of avoiding default processing.
In this sample (both VB and CS), we override PreProcessMessage and avoid processing the Keys.Tab key. You can modify the code to not process Keys.F2 as well. DataGridTextBoxColumn is subclassed so it can use our derived TextBox.
I want to do custom handling of special keys such as the Tab key or F2 in the TextBox of a column in the DataGrid. How do I subc
本文介绍如何在DataGridTextBoxColumn中使用自定义TextBox以增强功能并避免默认处理。通过继承和覆盖虚拟方法PreProcessMessage来阻止Tab键的默认行为。

被折叠的 条评论
为什么被折叠?



