|We have a Winforms form containing a textbox. The idea is that as you enter a string of hex characters these are trapped and are used to change the background colour of the texbox dynamically. So, if you enter ff0000 that would change the background colour to red. The user keystrokes are intercepted with the KeyPress and KeyDown to filter specific characters such as not allowing G, Y that sort of thing. All of this works okay and the texbox's text changed event correctly changes the colour.
The text in the textbox is mostly visible. If I set the foreground colour of the text to black there's no problem if you set the background colour to red (ff0000), blue (ff) but when you set it to black (0) or just-a-bit-away-from-black (1) you obviously can't see the text. If I set the forecolour of the text to white you get the same problem at the other end of the colour "spectrum". I thought of using grey as that's sort of midway but if you set the background colour to (808080) or near to then, well, you can see the problem!
The idea I hit upon and which works relatively okay is to invert the bits of the RGB and set the foreground colour to that. So, depending on what's entered you might have a background colour of slightly-purpley-reddish-orangey-blue and the text might look like whitish-green-yellow-tinged-magenta-with-a-touch-of-russet-but-not-too-much.
It works upto a point if you don't mind your foreground colour looking like it's injected pure LSD but I'm wondering if there's a more optimal solution or suggestion you'd recommend? In other words, is there a good solution so that no matter what the background colour is set to, the foreground colour of the text within it can be displayed with a best fit contrast?
If there is one thing more dangerous than getting between a bear and her cubs it's getting between my wife and her chocolate.