is there any way to add an extra item to the default WinForms TextBox context menu without creating my own?
Subclass TextBox (derive from it) or native handle (with NativeWindow), and then override window procedure as follows:
protected override void WndProc(ref Message m)
{
if (m.Msg == <your menu id>) { ... return; }
...
if (m.Msg == 0x0093 /*WM_UAHINITMENU*/ || m.Msg == 0x0117 /*WM_INITMENUPOPUP*/ || m.Msg == 0x0116 /*WM_INITMENU*/)
{
IntPtr shortcut = m.Msg == 0x0093 ? Marshal.ReadIntPtr(m.LParam) : m.WParam;
// add <your menu id> to shortcut
...
}
...
base.WndProc(ref m);
}
I think you should override WndProc and capture the messages that the textbox receive.
It is possible, but complicated. I suggest you implement your own menu using "modern" ContextMenuStrip class instead of standard ContextMenu.