https://zoheirsoftware.com/blog/user-control-in-csharp