This Web Tutorial is for people who are new to programming and new to Xojo. It is an introduction to the Xojo development environment and will lead you through the development of a real web app. It should take you about an hour to complete this tutorial.
If you are already familiar with Xojo and would like a shorter introduction to making web apps with Xojo, jump to the Web QuickStart.
If you haven’t done so already, now is the time to launch Xojo. After it finishes loading, the Project Chooser window appears.
Xojo lets you build several different types of apps (Desktop, Web, Console and iOS). For this Tutorial, you are building a web app, so click on Web.
You will now see three fields that need values: Application Name, Company Name and Application Identifier.
Xojo opens the Workspace with the default web page for your app selected in the Navigator and displayed in the Layout Editor.
Navigator: The area on the top left shows you all the items in your project. By default you can see WebPage1 (which is selected), the App object and the Session object. Use the Navigator to navigate within your project.
Layout Editor: The center area is the Layout Editor. You use the Layout Editor to design the user interface for the web pages in your app. It shows the web page and previews how it looks when the app runs in a web browser. In this image, the web page is blank because you haven't yet added any user interface controls from the Library.
Library: The area on the right is the Library and shows the controls and interface elements that you can add to a web page or to the project. You design the web page by dragging controls from the Library to the web page. You can also add a control to the web page by double-clicking it. You can change how the controls display in the Library by clicking the small gear icon and choosing a different setting.
If the Library is not visible, click the Library button on the toolbar to show it.
Inspector: Not shown in the above image is the Inspector, which allows you to see and change the properties for the selected control. This area of the Workspace window is shared with the Library. You can show the Inspector by clicking the Inspector button on the toolbar. The Inspector shows information about the selected item in the Navigator or Editor. The contents of the Inspector changes as you click on different items.
In this tutorial you will create an app to track tasks.
For the Task manager app, you enter tasks in the text field and then click the Add button to add them to the list. You can click on individual tasks in the list to delete them or mark them as complete.
Task Manager uses three controls:
The next sections walk you through creating the user interface and adding the necessary code to make the app work.
You should have WebPage1 open in the Layout Editor. You are now going to add a Listbox to the web page. The Listbox is used for storing the tasks.
As you get close to the edges of the web page, you will see alignment indicators that help you position the control.2. Drop the Listbox when you are happy with its position on the web page.
Now you will add the three buttons needed by Task Manager to the web page.
The '''Delete''' button removes tasks from the Listbox, the '''Add''' button adds tasks to the Listbox and the '''Complete''' button marks tasks in the Listbox as completed. Let's add those three buttons to WebPage1:
Use the alignment indicators to help you position the button so that it lines up with the right edge of the Listbox.2. In the Library, click on the Button control and drag it to the web page near the bottom-left corner.
Again, take advantage of the alignment indicators to help you position the button.3. In the Library, click on the Button control and drag it to the web page near the bottom-right corner.
The Text Field is where the user types the Task to add to the list.
Use the alignment indicators as guides to help you line everything up correctly.
After adding all the controls, your web page should now look like this:
Controls have various values associated with them such as their caption, height, width and more. Because they help describe the control, they are called ''Properties''. Changing property values allows you to change the look and behavior of the object. For this project, let's change various properties of the webpage and the controls you added. Some of the things you need to do are:
The Inspector is used to change web page and control properties. It shares the same area on the right of the Workspace as the Library. In order to show the Inspector, click the Inspector button on the toolbar or press ⌘-I (Ctrl+I on Windows and Linux).
If you haven’t already, display the Inspector by clicking the Inspector button on the toolbar. You need to change the Name and Title properties of the web page:
The Inspector pane now shows the properties for the web page.2. In the Name field (located in the ID group), change the name from “WebPage1” to “TaskManagerPage”. Press Return to see the name change in the Navigator.
The Listbox is where the tasks that your user enters are displayed and stored. You need to change the following properties: Name, ColumnCount, Initial Value, ColumnWidths and Locking.
The Inspector pane now shows the properties for Listbox.2. In the Name field (located in the ID group), change the name from “Listbox1” to “TaskList”. Press Return to see the name change in the Navigator.
Using “100,*” tells the Listbox that the first column should always be 100 pixels wide and that the rest of the columns share the available width.6. Lastly you need to make changes to the locking so that the Listbox gets larger or smaller as the web page size changes. In the Locking group, look at the image that shows the web page with small locked icons for the top and left and small unlocked icons for bottom and right. Click the locks so that top, left, bottom and right are all locked.
The three buttons are used to perform actions. You need to change the following properties for each button: Name, Caption and Locking.
The Delete button is used to remove tasks from the TaskList.
The Inspector now shows the properties for WebButton.2. In the Name field (located in the ID group), change the name from “Button1” to “DeleteButton”. Press Return to see the name change in the Navigator.
The Add button is used to add the task entered in the TextField to the Task List.
The Complete button is used to mark a task as completed.
In the Project List, the newly renamed controls show under the Controls for TaskManagerPage.
The TextField is where your user will type the task to add to the list. You need to change the following properties: Name and Locking.
After adjusting all the properties for the web page and its controls, your layout should look like this:
Your user interface layout is now complete, so it’s time to try it out. But before you go further, you should first save your work.
Now you can test your app:
Of course, Task Manager doesn’t do anything yet! For that you need to add some code, which is what you'll do next.
The Add button adds tasks to the list. The code you add to the button needs to take what was typed in TaskField and add it as a new row to the list.
Follow these steps to add the code:
The Add Event Handler window appears. When a user presses a WebButton, the Pressed event handler is called.2. The Pressed Event Handler is already selected so just click the OK button.
This displays the Code Editor. Also notice the Navigator updates to show the Pressed event underneath the AddButton control.
Now you need to get the task that was typed into the TaskField. You might think you could get the task just by referring to the name of the field, TaskField. That is close, but not quite what you want. What you instead need is a property of TaskField. When you need to refer to a property of an object, you use the name of the object, followed by a dot, followed by the name of the property. In other words, you use this syntax: ObjectName.PropertyName. This is something called “dot” notation and is commonly used in object-oriented programming. In this case the object is TaskField and the property you want is Value (use the Language Reference to find out about all the properties available to TextFields). The syntax looks like this:
To actually add a row to a Listbox, you use the AddRow method. You already know how to get the text in the TaskField from step 2. As you have seen before, objects can have properties. And as you now see with TaskList, objects can also have methods. AddRow is one of many methods available to Listboxes and it adds values to the two columns in TaskList. The first column contains the completed status, so it is initially set to blank. The second column contains the name of the task.3. Add this code to the Pressed event:
When the user clicks the Complete button, the selected task in the Listbox should be marked as completed. This is indicated by showing a checkmark (✓) in the Completed column.
Let's add code to the Complete button in the same way we added code for the Add button:
Notice the Navigator updates to show the Pressed event underneath the CompleteButton control. To change a row, you first need to know what row is selected. In a Listbox, the currently selected row is contained in the ListIndex property. To set the value in a particular cell of a Listbox, you use the Cell property, specifying the row and column.3. In the Pressed event handler, add this code to put the checkmark character in column 0 (the completed column) of the currently selected row:
TaskList.CellValueAt(TaskList.SelectedRowIndex, 0) = "✓"
A checkmark appears in the Completed column.6. Close the browser tab or window.
The Delete button is used to remove tasks from the list. The code you add to the button needs to determine the selected row in the list and remove it from the list.
Let's add code to the Delete button in the same way we added code for the Complete button:
Since the selected row will be deleted, you again want to use the SelectedRowIndex property.3. Use the Listbox method RemoveRowAt to remove a row from the Listbox. You pass RemoveRowAt the row number to remove as a parameter. # Add this code to the Pressed event handler:
Finding Bugs is part of creating apps. A bug is when your code or app does something unexpected, often leading to a crash. Although your app works just fine, there are a couple of lingering bugs that need addressing. Have you figured out what the problem is?
Here’s a hint: What happens if you you click on the Complete or Delete buttons but have not selected a task? Try it.
Xojo has switched to its Debugger with a line of code highlighted because an error has occurred. The error occurred because you attempted to remove (or complete) a row that does not exist. When no row is selected in the Listbox, the SelectedRowIndex property returns -1. Since this is not a valid row in the Listbox, the CellValueAt method caused an error. Specifically, the value passed was out of bounds and thus the error is called an ''OutOfBoundsException''. It's called an ''Exception'' because it's something that is the unusual case.2. Click the Resume button in the Debugger toolbar, to see the actual error message.
Nobody wants buggy code. Luckily it is easy to prevent this bug from occurring. Essentially, you want to make sure a row is selected before you attempt to Delete or Complete a task.
The code to do this uses what you have already learned.
5. Edit the code for the Complete button as well:
If TaskList.SelectedRowCount > 0 Then
If TaskList.SelectedRowCount > 0 Then
TaskList.CellValueAt(TaskList.SelectedRowIndex, 0) = "✓"
In both cases, the code verifies that a row is selected by checking the SelectedRowCount property to ensure that a row is selected before the actual method is called.6. Save the project by choosing File > Save.
Just because your app seems to work, doesn’t mean you are finished with it. A good developer always thoroughly tests their apps to look for possible problems.
You already found and fixed one problem (pressing the Completed or Delete button when no row was selected). Do you think there are other problems to fix? Run the app and play around with it a bit. Make a note of things you want to change. In the next section, you will add some improvements to Task Manager.
Did you notice that there are times when the buttons in Task Manager probably should be disabled? For example, the Complete button should not mark a task as completed if one is not selected. Right now you can click it, but nothing happens. Also, you are not going to want to add a task to the list if nothing has been entered in the Taskfield.
There are several ways to accomplish this, but one way is to disable the buttons when they should not be used.
Follow these steps to add this improvement:
Now you will add code to enable the Add button when there is text in the TaskField.7. On the web page, double-click the TaskField control.
The Add Event Handler window appears. Here you are seeing yet another list of event handlers. Every control type has its own specific list of event handlers. In this case, we want to disable AddButton when there is no value in the Taskfield and enable it when there is a value. The ValueChanged event is called whenever the value in the Taskfield is changed, either by the user typing or by your code changing the Value property.8. ValueChanged is already selected so press the OK button.
You now need code that checks the Value property of the TaskField (Me.Value) to see if anything is there. If there is a value there, then the AddButton is enabled by setting its Enabled property to True. If there is no value, then it is disabled by setting its Enabled property to False.9. Enter the following code:
If Me.Value <> "" Then
AddButton.Enabled = True
AddButton.Enabled = False
You already added code to prevent the Delete and Complete buttons from doing anything if no row is selected in the Task List. Now you can also make those buttons enable when a row is selected and disable when no rows are selected. This is accomplished with the SelectedRowCount property of the Listbox.10. Double-click the TaskList control.
The SelectionChanged event is called whenever the selection in the TaskList control changes.11. SelectionChanged is already selected so press the OK button.
If Me.SelectedRowCount > 0 Then
DeleteButton.Enabled = True
CompleteButton.Enabled = True
DeleteButton.Enabled = False
CompleteButton.Enabled = False
Notice that the Add button is initially disabled. But try typing some text in the TaskField. The Add button immediately become enabled. And if you remove the value from the TaskField, the buttons again become disabled. Similarly, when you click on a row in the Task List, the Delete and Complete buttons become enabled.
There are several ways to deploy a Xojo web app. The easiest way is to use Xojo Cloud so that you can just click "Deploy" on the main toolbar to send your app to web server where it can be used.
You can also deploy apps yourself as a ''standalone application'' that is a self-contained app and web server which can be run on any computer or server. Users can access the app by using the computer's URL and port number.
To learn more about these options, refer to Web App Deployment Overview in the User Guide.
Congratulations, you have successfully completed the Web Tutorial and now have a fully functional app. To continue on your journey of learning Xojo, you should next move on to the User Guide, which covers Xojo in its entirety. You will also want to refer to the Reference Guide, which covers the specifics of language elements, classes and other details of Xojo.