I thought the new Joystick API in OpenTK was worth looking into.
I figured the best way to learn it would be by writing an example app, so that's what I've done.
It's crude right now, needs cleaning up, but if it's wanted I'm happy to submit it with the other examples.
Basically each shaded square represents two axes. They tilt left/right for one and up/down for the other.
The red squares represent the buttons and turn green when the buttons are pressed.
I've had it running in both Windows and Linux (with 3 joysticks).
The top joystick shown in the screenshot is an X-Box 360 controller. It doesn't really get on with Linux and has a substantially different layout and even a button that doesn't seem to exist on the hardware. Still, all the axes are accessible and the buttons you can find on the hardware all work.
The other pad is a Saitek P880.
I've also tried a very basic pad with a just a digital pair of axes, no problems with that.
Note: My recent questions about the text under Linux are because I noticed my list on the right-hand-side wasn't working under it. ;o)
Updated: Changed all the graphics so it looks a lot nicer, moved the layout around a bit. Screenshot shows 3 joysticks.
Attached the source code, it probably still wants cleaning up some ideally, but it's straightforward.
Uses Display lists at the moment, I may change that to VBOs.
Should be room for 4 joysticks on there, can be easily edited if someone wants to add more. ;o)
There's some code in there that should, if OpenTK ever supports it, cope with unplugging / plugging in joysticks and update the display accordingly.
As it currently stands, it uses the number of joysticks OpenTK reports to initiate that rebuilding (if it changes, the joystick information is re-read) and if you pull a joystick at the moment it just reports whatever OpenTK gives it (which seems to be -1 for all axes).