Manage a shared image collection
Declare reusable images independently from the controls that display them.
A shared list avoids embedding the same image configuration in every consumer. Resource names are project identities; they are not arbitrary absolute file paths. Preserve the declared assets when copying or packaging the project.
Step 1Prepare a safe practice project#
Extract the archive into a new writable folder, separate from your own application. Open ImageList.mcbproj in McBasic™. Keep every declared source, layout, resource and migration file together.
To reconstruct it yourself, create a DesktopApp project and add the files declared below. In the complete project, follow these steps as a guided rebuild: replace each named source file once and Check after all its procedures are present.
Exact project configuration
{
"schemaVersion": 1,
"projectId": "52cc3a4e-18d8-4e1c-b6ea-548d746ac151",
"name": "ImageListSample",
"kind": "DesktopApp",
"ai": {
"storeChatsInProject": false
},
"language": {
"dialect": "McBasic1",
"requireExplicit": true,
"compare": "Binary",
"defaultArrayBase": 0
},
"application": {
"bundleIdentifier": "com.mcbasic.samples.imagelist",
"version": "0.1.0",
"buildNumber": "1",
"startupFormId": "form-main",
"shutdownMode": "OnStartupFormClosed"
},
"forms": [
{
"id": "form-main",
"typeName": "frmMain",
"layout": "Forms/frmMain.form.json",
"code": "Forms/frmMain.bas"
}
],
"modules": [],
"classes": [],
"tests": [],
"references": [],
"resources": [
{
"name": "Logo",
"path": "Resources/logo.png"
}
],
"targets": [
"osx-arm64"
],
"capabilities": []
}Step 2Build the Form and set its properties#
frmMain
Select the Form first and set its properties. Add containers before their children. These are initial Designer values, not statements to paste into a procedure.
| Form property | Value |
|---|---|
Caption | "ImageList — McBasic" |
Width | 480 |
Height | 210 |
MinWidth | 400 |
MinHeight | 180 |
| Type | Name | Parent |
|---|---|---|
| Label | lblStatus | Form |
| CommandButton | cmdClose | Form |
| ImageList | imgListMain | Component tray |
lblStatus · exact Inspector values
| Property | Value |
|---|---|
Left | 30 |
Top | 35 |
Width | 420 |
Height | 70 |
Caption | "Loading ImageList…" |
WordWrap | True |
| Anchor edges | Left, Top, Right |
cmdClose · exact Inspector values
| Property | Value |
|---|---|
Left | 30 |
Top | 125 |
Width | 120 |
Height | 36 |
Caption | "Close" |
TabIndex | 0 |
| Anchor edges | Left, Bottom |
imgListMain · exact Inspector values
| Property | Value |
|---|---|
Images | "Logo=Logo\nSecondary=Logo" |
Step 3Connect the events explicitly#
frmMain
| Object | Event | Procedure | Parameters |
|---|---|---|---|
cmdClose | Click | cmdClose_Click | Click() |
| Form | Load | Form_Load | () |
Step 4Enter the complete behavior#
Open the named source file. Enter declarations first, then every procedure. Expand a procedure for its full body, or copy the complete file. Helpers are required: do not stop after entering the first Click handler.
Forms/frmMain.bas
Enter these declarations at file scope, before the procedures.
Option ExplicitPrivate Sub Form_Load()
Initialize state before enabling dependent actions. Keep the shared declarations and startup dependencies with this procedure.
Private Sub Form_Load()
If imgListMain.Count = 2 And imgListMain.Error = "" Then
If imgListMain.Images.Item("Logo") = Resources.Logo Then
lblStatus.Caption = "2 images loaded. Named and one-based lookup are available."
End If
Else
lblStatus.Caption = imgListMain.Error
End If
End SubPrivate Sub cmdClose_Click()
Enter the complete action, including its input checks and calls to helper procedures.
Private Sub cmdClose_Click()
Unload Me
End SubCopy the complete Forms/frmMain.bas file
Replace the file once; do not append duplicate procedures.
Option Explicit
Private Sub Form_Load()
If imgListMain.Count = 2 And imgListMain.Error = "" Then
If imgListMain.Images.Item("Logo") = Resources.Logo Then
lblStatus.Caption = "2 images loaded. Named and one-based lookup are available."
End If
Else
lblStatus.Caption = imgListMain.Error
End If
End Sub
Private Sub cmdClose_Click()
Unload Me
End SubStep 5Keep resources and storage reproducible#
Keep the following files at their declared relative paths. Apply migrations before the first query. Media and report resources must travel with the build.
| File | Purpose |
|---|---|
Resources/logo.png | Bundled asset / license |
Step 6Check, run and test the result#
Save all files and run Check. Resolve diagnostics before Run. Developer CLI users can work from the extracted folder:
mcbasic check ImageList.mcbproj
mcbasic run ImageList.mcbprojAcceptance checklist
- Open the project with its resource files present.
- Run and verify the image collection status.
- Inspect the collection’s keys and consumers in the Designer.
Step 7Make one change and repeat the tests#
Reference the same image list from an additional compatible control.
Save a working Git checkpoint first. Change one behavior, Check again and repeat the acceptance checklist. Compare with the downloaded solution if a regression appears.
20f4bfed6b · Build manifest