Introduction
For many years, LDC had an application which their in-house designers used to create prepaid card templates. Originally written in Visual C++, the application lacked the ability to design receipts for roll paper, and was beginning to look dated. It also was not sufficiently user-friendly for end-users. LDC wanted a new application that could be maintained by their in-house staff, and used by their end-users.
- Application window
- Windows form with MDI support
- MRU file list
- Layout and option settings persisted between executions
- Object palette (left)
- Dynamically loads with objects based on current document type
- Large or small icon view
- Card Editor window (center)
- Faithfully reproduces the card and receipt printer’s fonts and other characteristics for true WYSIWYG
- Duplicates most of Visual Studio’s form editor functions
- Grid, snap to grid
- Align controls
- Evenly space controls
- Multiple control selection
- Cut/Copy/Paste, drag and drop
- Multi-level undo/redo
- Rulers in three selectable units
- Custom toolbar
- Properties window (right)
- Fully modeless property grid
- Property changes support full undo/redo, even with multiple objects selected
- Edits common properties for multiple control selections
Architecture
The application was a Windows forms MDI application with a basic menu, toolbar, and status bar, an Object palette window, and a Properties window. For the two document types (die-cut card and roll receipt) there were MDI editor windows that could be created. Each of the editor windows hosted a set of graphical objects that could be created and manipulated.
Visual Basic .NET was chosen as it fit LDC’s maintenance requirement as well as being an efficient development platform. The project made extensive use of object inheritance and polymorphism to implement the editors as well as the graphical objects. Object properties and metadata were used to expose the object’s properties that were editable by the Properties window. The documents were stored in XML format, listing the document’s objects and property values, again driven by the object’s properties and metadata.
Click on the application image to get a full-sized picture and look at the design features.
Development
Working from their requirements document, I designed and implemented the entire application.
Technologies
- Visual Studio .NET 2003
- Visual Basic .NET
- Windows forms
- Custom Windows forms controls
Special Features
The dialog box above shows the String Editor, which is used to edit the FormatString property of a DataField object. It was implemented as a custom property editor.
A DataField object is a composite object consisting of a concatenation of string literals, date/time fields, and database fields. The String edit box shows a representation of the entire object, with the date/time and database field objects enclosed in braces. As you move the edit cursor into a field, the entire field is selected and its properties are displayed in the Field properties grid to the right. As with the main application’s Properties window, multiple field selections here will show the common properties in the Field properties grid.
The Insert Date/Time Field and Insert Database Field buttons may be used to insert fields at the insertion point.
Conclusion
The project included over 14,000 lines of Visual Basic .NET code, 14 character set bitmaps, 9 object icons, and 35 toolbar bitmaps.
The successful completion of this project proves that a full-featured visual object editor can be implemented using the .NET framework.