Making Controls Come Alive
By now, you've seen other books that spend most of their time showing you controls and having you try them. At the end of the book you almost feel like saying, "Hey, it's great, but what do I do with it?" Controls are used as the building blocks of all your application forms. Knowing how to use them and when to combine their functionality will help you enhance the way your application interacts with users.
Using Controls Together
Whenever you learn about controls, the one thing left out most often is how to combine them to perform a needed function within your application. This section shows you how to create your own file-copy routine and dialog box interface that will allow users of your application to copy a file to another location and filename. At this point, however, you won't be using the Common Dialog controls to allow users to select the files themselves; that's covered on Day 2.
When most programmers think of copying files within a Visual Basic application, they immediately think of the FileCopy command included in the language. Although FileCopy copies the file properly, there's no way for your application to perform any other tasks while the command is executing. If you want to show your users any type of status information, it would be a before and after status only, not continuous as the command is executed. To create this type of dialog-box interface, you'll combine the following on one form:
ProgressBar control
Label control
In addition to these controls, you also need two command buttons on the form to allow users to start the process and close the form. To create this small application, start a new project and name it FILECOPY. Add the following controls to the form as shown in Figure 1.19:
Progress Bar
Label
Button
Button
Figure 1.19 Creating a custom File Copy dialog box function.
Change the properties for each control as shown in Table 1.1.
Table 1.1 Control Properties for the File Copy Function
Property |
Value |
Form Control |
|
Name |
frmFilecopy |
FormBorderStyle |
Fixed Dialog |
ControlBox |
True |
MaximizeBox |
False |
MinimizeBox |
False |
StartPosition |
CenterScreen |
ProgressBar Control |
|
Name |
prgStatus |
Visible |
False |
Label Control |
|
Name |
lblDisplay |
Text |
Leave blank |
Button1 Control |
|
Name |
cmdQuit |
Text |
Quit |
Button1 Control |
|
Name |
cmdCopy |
Text |
File Copy |
To get the code to copy the file while your application executes other commands, use the FileGet and FilePut file statements to read data from the source file and write it to the destination file. Both files will be opened by using the Binary option of the FileOpen statement. Only two events need code in this application:
For the cmdQuit_Click event, you need only the command Close to finish the execution of the application.
For the cmdCopy_Click event, add the code in Listing 1.4 to perform all the necessary tasks.
Listing 1.4 FRMFILECOPY.TXT: The File Copy Routine to Copy a File Within an Application
Private Sub cmdCopy_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdCopy.Click Dim lngFileSize As Long Dim intLoopCtr As Integer Dim intBufferCount As Integer Dim strInByte As String Dim strFrom_filename As String Dim strTo_filename As String Dim i As Integer, k As Integer 'Set the length of the strInbyte string strInByte = Space(256) ' Set the from and to file copy paths strFrom_filename = "F:\temp\307312c2.doc" strTo_filename = "F:\temp\Copy of 307312c2.doc" ' If the destination file exists, ask the user if they ' want to continue If Dir(strTo_filename) <> "" Then If MsgBox(strTo_filename & vbCrLf & _ " already exists. Copy over old file?", _ MsgBoxStyle.OKCancel) = MsgBoxResult.Cancel Then Exit Sub End If End If ' Get the size of the file to copy ' and calculate the number of times to loop ' the copy routine based on moving 256 bytes at a time lngFileSize = FileLen(strFrom_filename) intBufferCount = lngFileSize / 256 ' Set the progressbar min and max properties prgStatus.Minimum = 1 prgStatus.Maximum = 1 + intBufferCount ' Open the source and destination files FileOpen(1, strFrom_filename, OpenMode.Binary) FileOpen(2, strTo_filename, OpenMode.Binary) ' Set the label to display the file being copied ' and make all of the related controls visible lblDisplay.Text = "Copying.. " & strFrom_filename lblDisplay.Visible = True prgStatus.Visible = True ' This routine loops until the entire file is copied For intLoopCtr = 1 To intBufferCount + 1 FileGet(1, strInByte) FilePut(2, strInByte) ' change progressbar value to indicate the status of ' the copy function prgStatus.Value = intLoopCtr ' the DoEvents command allows Windows to update ' the controls on the form Application.DoEvents() 'Slow the program down to see the progressbar in action For i = 1 To 60000 k = 1 Next Next intLoopCtr ' After the copy is complete close both files FileClose(1) ' Close file. FileClose(2) ' Close file. ' Stop the animation and make all related controls ' invisible prgStatus.Visible = False lblDisplay.Visible = False ' Inform the user that the function is complete MsgBox("Copy function complete", MsgBoxStyle.Information) End Sub
Before executing this application, you must change the source file string to a file that exists on your computer, and change the destination file string to a valid path and filename. Execute the application and click the File Copy command button; what you see should closely resemble the Windows File Copy dialog box. This is only one example of what you can do when combining different controls. The only limitation you'll have is your own imagination when thinking of new combinations of controls. Of course, some combinations already exist in Visual Basic, and it's silly to re-create the wheel. Day 2, however, will enhance this example with the Common Dialog controls.