Are there any ways to improve performance when constructing several forms with large numbers of controls (500+)?
Our controls are laid out in a label + 6 text box per row configuration, as shown below:
We have used the following containers to structure our controls:
- DevExpress’ XtraLayoutControl
- Panels around each row and moving manually
- Common table control
We can’t use a grid as the text boxes have to be hidden on a case-by-case basis and our forms have to look fairly close to the printouts. Also, each row has it’s own data type, so we need to add validation and editors for each.
The table control is the most performant, where each form takes around 2 seconds to load.
As each of these will represent a document in our software and we allow users to open multiple documents at once, we are trying to find a way to improve the performance.
One suggestion was to cache the actual form and have a state object that stores the data. However, we allow the user to see more than one document at once.
Another suggestion was to load the document in parts and show each part as it becomes loaded. This isn’t ideal as we are known for having a document that looks almost exactly like the printout.
Are there any other strategies available, or should we just bight the bullet at tell our customers that this program will be slower than it’s VB6 predecessor?
An example of the form design we’re redeveloping is here: Link

Complex datatype handling and stuff is to you, this is a 5 minute before-lunch sample to show how much winforms sucks and how much WPF rules:
XAML:
I see that you have several other requirements here, such as hiding texboxes and stuff. It doesn’t matter if these rows are a different data type, you just need to do a ViewModel (which in this case would be my
public class Item, which hold the data you want to show in the screen, and let the user be able to interact with.For example, you could replace the
List<string>inside theItemclass with something more complex, and add some properties likepublic bool IsVisible {get;set;}and so on.I strongly suggest you take a look at WPF (at least for this screen in particular).
Copy and paste my code in a new -> WPF project and you can see the results for yourself.