mikejsavage.co.uk • About • Archive • RSS • Thanks for blocking ads! Blocking ads owns: AdGuard for Safari / uBlock Origin for everything else
More to file under "things that are excruciatingly stupid so nobody smart writes about them".
One thing that causes the designer to shit the bed is if your form isn't at the top of the non-designer file. So a specific example:
namespace Things {
class FuckingEverythingUp { }
class MyForm : Form {
// ...
}
}
will not work (and will give you a useless error message about dragging
and dropping from the components window). You need to move MyForm
above FuckingEverythingUp
. Btw Microsoft made $85 billion revenue last
year and has over 100k employees.
The other thing that's not so obvious to work around (but still pretty
obvious) is custom form components. In our case we have a few hacked
components to enable text anti-aliasing (lol), but the designer can't
handle them. I got sick of going into the designer file and replacing
them all with normal labels whenever I wanted to change the UI, so I
added methods like ConvertLabelToHackLabel
and call them in the form
constructor. All they do is make a new thing and copy all the properties
over.
The only things that are non-trivial are copying events, which is copied and pasted from StackOverflow thusly:
using System.Reflection;
// ...
var eventsField = typeof(Component).GetField("events", BindingFlags.NonPublic | BindingFlags.Instance);
var eventHandlerList = eventsField.GetValue(originalButton);
eventsField.SetValue(hackedButton, eventHandlerList);
and making sure you update the form's AcceptButton
to point at the
hacked button as needed.
Booooooooring!