Question

I am designing a WinForms CRUD "like" app for a large group of Nurses and Social Workers to interact with Client information.

There are many different forms(about 30ish) that they need to "possiblly" interact with for any given client and they "can be" required to jump from one to another for a specific person.

I am strugghling with the design of the user interface. I have only designed very simple linear WEBForm CRUDs where you do what you need on a page and click next.

What makes the mont sense for a non-linear WINForm CRUD app?

I had started down the path of tabs with embedded forms in those tabs but, possibly due to my lack of ability, the program feels very bulky. I am not sure straight MDI is the way to go as I have very simple users who may be confused easily if windows are "hidden."

I would GREATLY appreciate any advice, insight, or examples anyone might have. Espeacially if anyone has had to make a WINForm CRUD app themselves.

What UI layout worked(or didn't) for you?

An example of what mine currently looks like is here -->

http://lh6.ggpht.com/_DqVwi_JXyS0/Sf8EI0ETYrI/AAAAAAAABhI/pmAhozErubo/s288/MATRIXUIExample.JPGFrom DevFiles
Was it helpful?

Solution

There are a few accepted patterns here, and you can sometimes combine them productively:

  1. TabPages
  2. TreeView (Win Explorer Folders, Visual Studio's Tools|Options)
  3. Collapsing Panels (Outlook Mail/Calendar/Contacts)

The Collapsing Panels are not a standard control but there are several implementations available (here's just one)

And your not alone, for some inspiration see this SO answer.

OTHER TIPS

One of the most important things I've learned through CRUD type apps, is to make sure that there are hotkeys for nearly every button and that the tab order is setup properly.

Most of the time, when you're doing data entry/modification, you don't want to drop your hands off the keyboard to move the mouse to the Submit/Update button, especially with large volumes of data to work with. Having these two items in order will greatly enhance the productivity of the app.

Disclaimer: I have been doing CRUDs for I don't know how long, but I'm just starting now with my first winforms app.

So, some mixed ideas:

In our current system (written using Centura/Gupta) we use a MDI-like approach. I think it is important to allow the user to start working on a new record without forcing him to close his current work, so a list of open windows is always displayed to allow quick switching between the different forms. Example:

alt text
(source: pingmbh.de)
List of open windows in the lower left. Also this system makes it possible to open one record from inside another, e.g. open a customer, show the orders of this customer, doubleclick on one of his orders to open it and so on.

Now about winforms: After doing some research I deceided against MDI and instead use a Form containing some SplitContainers. One of this container panels shows a list of open windows, another shows the current form. Since I did not find a way to show a Form in a panel, the forms are realized as user controls. The main form keeps track of the opened windows and displays them in the window list. If the user clicks on a window in the list, or opens the same record from somewhere else in the programm, the appropriate panel is brought to the front. Picture of a work in progress: alt text
(source: pingmbh.de)
Consider to seperate the selection of existing records from the editing of these records, i.e. show the existing records in some kind of table (like a gridview) with filter and search capabilities and let the user doubleclick these records to edit them.

I noticed on your screenshot that you have buttons for "Insert" and "Update". Is this for creating new records and saving existing records? I think a better approach is to give the user a "New" button, then open a form that has "save" and "cancel" buttons. The user may not allways remember if he started to edit a new or an existing record.

The selection screen btw is a good place for the "new record" button.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top