Microsoft KB Archive/102754
Article ID: 102754
Article Last Modified on 10/30/2006
- Microsoft Exchange Electronic Forms Designer 5.0, when used with:
- Microsoft Mail for PC Networks 3.0
- Microsoft Mail for PC Networks 3.2
This article was previously published under Q102754
With version 1.0 of the Microsoft Electronic Forms Designer, you can include Microsoft Visual Basic's combo box control on a form, giving users the option to choose from items in a list. When the form is sent, however, only the selection from the list box is written to the MEFPackage and sent. This can produce unexpected results when the form is read, because the entire list of items in a list box is not automatically packaged.
There are three ways to handle list boxes in an E-form:
- Transfer the selection from the list box on the Compose form to a read-only text edit box on the Read form.
- Duplicate the Compose form's list box on the Read form and display which option was selected by the user.
- Manually package and send each of the items in the list box.
To transfer the selection from the list box on the Compose form to a read-only text box on the Read form, you can add code to the WriteMessage() and ReadMessage() functions in the EFORM.BAS file. Comments in each function indicate where to add code.
In the following procedure, the variable "MyText" describes the value of the list box control lstColor on the Compose form. The control, txtColor, is the corresponding text edit box on the Read form in which the value will be placed.
Declare the variable and set its value:
Dim MyText As String MyText = frmCompose.lstColor.Text
Add the value of "MyText" to the package as a data item identified by the item ID "TheString" by calling MEFWriteText in the WriteMessage() function:
MEFWriteText gPackage, "TheString", MyText
Read the variable from the package and assign it to the text edit control box by adding the following code to the ReadMessage() function:
frmRead.txtColor.Text = MEFReadText(gPackage,"TheString","")
Make the control box read-only by adding the following line to the Load event procedure of the Read form:
MEFSetEditReadOnlyState txtColor, 1
Additionally, change the BackColor property of the text box control to gray so users know they cannot modify the contents of the text box.
To duplicate the list in both the Compose and Read forms, use the Microsoft Visual Basic AddItem method in the Load event procedure on each of the forms.
The following is an example that describes this process, where lstColor is the list box control name on both the Compose and Read forms:
Add a list of items to the list box on the Compose form using the AddItem method in the Load event procedure.
lstColor.AddItem "Red" lstColor.AddItem "Green" lstColor.AddItem "Blue" lstColor.AddItem "Yellow"
- Repeat step 1 for the Read form by copying the text entered above and pasting it into the Load event procedure of the Read form.
The WriteTaggedControls() function in EFORM.BAS will write both the list index and the text of lstColor so data will be preserved even if the user does not make a selection from the list.
If the contents of the list box change based on options selected by the user, you can manually package and unpackage the contents of the list.
Using a For...Next loop with the List and ListCount properties of a list box, you can cycle through each of the items in the list, calling MEFWriteText to add each item to the MEFPackage. You can unpackage the items in the list on the Read form in a similar manner, by adding code to the WriteMessage() and ReadMessage() functions in EFORM.BAS. Comments in each function indicate where to add code.
The following example lists the code you should add to each function. In the example, the variable "TheTotal" stores the total number of items in the list and is written to the package by MEFWriteLong. The variable "theText" temporarily stores each item in the list so it can be written to the package by MEFWriteText. Each of the items in the list is written to the package separately and is defined by a unique item ID. Finally, the variable "SelectedText" stores which item is currently selected from the list and is written to the package using MEFWriteText.
Add the following code to the WriteMessage() function in EFORM.BAS. Note the comments that describe the various steps.
'Declare the variables Dim n As Integer Dim TheTotal As Long Dim theText As String Dim SelectedText As String 'Find the number of items in the list and write it to the 'package TheTotal = frmCompose.lstColor.ListCount - 1 MEFWriteLong gPackage, "Total", TheTotal 'Process the list, writing each item to the package using a 'unique itemID, ("List0". "List1", etc.) For n = 0 To TheTotal theText = frmCompose.lstColor.List(n) MEFWriteText gPackage, "List" & Str$(n), theText Next 'Write the current contents of the selection to the package SelectedText = frmCompose.lstColor.Text MEFWriteText gPackage, "SelText", SelectedText
Add the following code to the ReadMessage() function to unpackage the data.
'Declare variables Dim n As Integer Dim TheTotal As Long 'Find the number of items in the list by reading the package. TheTotal = MEFReadLong(gPackage, "Total", 0) 'Read in each of the items and add it to the list using AddItem For n = 0 To TheTotal frmRead.lstColor.AddItem MEFReadText(gPackage, "List"& Str$(n), "") Next 'Read the selected text from the package and assign to the 'list box frmRead.lstColor.Text = MEFReadText(gPackage, "SelText", "")
Additional query words: 1.00 grey