September of 2017 is almost gone, and only now I had a chance to look at the most recent issue of the monthly MSDN magazine. What's the hot topic in September? .NET Core 2.0 / Standard 2.0 is highly praised by most MSDN authors. One of the articles mentions a feature I did not know existed. It's called Razor pages. In short, it's the new Web Forms. It allows you to finally transition to Razor even for small websites, which do not require a full blown MVC structure (where files live in 3 different folders, and you are constantly switching between them).
Suppose you were lucky to find this article and already resolved all your compile time errors. I found an issue that may require redesign of your application, even though everything else appears to be working fine. I'll put it straight: MenuStrip/ToolStripMenuItem pair is not 100% backwards compatible with MainMenu/MenuItem. One particular thing is how keyboard shortcuts work. In MainMenu concept, triggering a shortcut by pressing a hotkey combination causes .NET framework to open the corresponding menu under the hood, process Popup event and only then click the MenuItem.
I have a main form which is an MDI parent and a modal form, which is a progress dialog. When loading is completed, an MDI child is opened. If it cannot be completed, an error message shows up with user prompt. Problem is if user takes action, and the modal form is closed, the focus is switched to the application, which was active before my application was started. In my case it was Visual Studio 2010.
There is one good way to dynamically show/hide items in a ListBox - use a DataView as DataSource. You do not need to manually Add and Remove items from your list. In fact, coding effort is very low with this approach.
Suppose every once in a while in your application you need to have a popup dialog being shown. This dialog is a value picker, nothing more. It shows as many values as your screen can handle. Problem happens when list population takes considerable amount of time, say, 5 seconds. Until then you are completely unsure which size it needs to resize to.
Linearise ControlCollection tree into array of Control - generic extension method, no recursion, LINQ or GetNextControl. See attached project for usage/sample (VB.NET 4.0, Visual Studio 2010).
You do not need to implement your own HashSet for that, just use the native UnionWith extension method.
Here is a proper way to do it - inherit a class from native ComboBox and override OnDropDown to raise a custom DropDownOpening event first. If you anticipate loading to take considerable time, you can wrap your reload code into a construct like this
I recently had a Microsoft workshop session and became excited about parallel for/foreach/etc. There we got a solid 60% of efficiency. It means that whenever number of cores increases by 2x, performance is boosted by 1.6x.
I recently stumbled upon this problem in one of our company .NET projects. For some reason, project settings there were configured for Text comparison, rather than Binary. As a result, lower case strings were equal to upper case, which was discovered later when some bug in UI occured. There were three solutions available.