Xojo【1】 语言控件【2】事件冒泡【3】机制基础教程
Xojo 是一种跨平台的编程语言,它允许开发者使用相同的代码在 Windows、macOS、Linux、iOS 和 Raspberry Pi 等操作系统上创建应用程序。在 Xojo 中,控件是构建用户界面(UI)的基本元素,而事件冒泡机制是事件处理的一个重要概念。本文将深入探讨 Xojo 语言中控件事件冒泡机制的基础知识,并通过实例代码【4】来展示如何使用它。
什么是事件冒泡?
在图形用户界面编程【5】中,事件冒泡是指当一个事件在一个控件上发生时,该事件会沿着控件层次结构向上传递,直到它到达顶层控件或被某个控件捕获并处理。这种机制允许开发者编写更通用的事件处理代码,而不必为每个控件单独编写事件处理程序。
在 Xojo 中,事件冒泡通常用于处理鼠标点击、键盘输入等用户交互事件【6】。
Xojo 中的事件冒泡机制
在 Xojo 中,大多数控件都支持事件冒泡。以下是一些常见的事件,它们支持冒泡:
- `MouseDown【7】`、`MouseUp【8】`、`MouseMove【9】`:鼠标事件。
- `KeyDown【10】`、`KeyUp【11】`:键盘事件。
- `Action【12】`:按钮点击事件。
事件冒泡流程
1. 当一个事件在一个控件上发生时,该控件首先处理该事件。
2. 如果事件没有被处理(即没有调用 `StopPropagation【13】` 方法),则事件会向上传递到父控件。
3. 事件继续向上冒泡,直到到达窗口或视图的顶层。
4. 如果在冒泡过程中事件被某个控件捕获并处理,则冒泡停止。
停止事件冒泡
在某些情况下,你可能希望阻止事件继续冒泡。在 Xojo 中,你可以通过调用 `StopPropagation` 方法来实现这一点。
xojo_code
Me.MouseUpAction = Sub()
' 处理鼠标事件
' ...
' 如果不想让事件冒泡,则调用 StopPropagation
StopPropagation
End Sub
实例代码
以下是一个简单的 Xojo 应用程序示例,它演示了事件冒泡机制:
```xojo_code
tag Application
tag MenuBar
&File
Open... &CmdO
&Save &CmdS
&Exit &CmdQ
&Edit
Cut &CmdX
Copy &CmdC
Paste &CmdV
&Undo &CmdZ
&Redo &CmdShiftZ
tag EndMenuBar
tag Window
Window1
Bounds【14】 = 0, 0, 400, 300
ChildWindow1
Bounds = 50, 50, 300, 100
BackgroundColor【15】 = &CFF0000
HasCloseBox【16】 = False
HasMinimizeBox【17】 = False
HasMaximizeBox【18】 = False
AcceptFocus【19】 = False
AcceptTabs【20】 = False
AllowAutoDeactivate【21】 = False
AutoDeactivate = False
Backdrop【23】 = 0
BackgroundStyle【24】 = 0
Border【25】 = True
HasShadow【26】 = False
Left = 50
Top = 50
WindowStyle【27】 = 0
Visible【28】 = True
WindowTitle【29】 = "ChildWindow1"
Begin
Panel【30】1
Bounds = 0, 0, 300, 100
BackgroundColor = &C0000FF
Border = True
HasShadow = False
Left = 0
Top = 0
TabOrder = 0
Visible = True
WindowStyle = 0
WindowTitle = "Panel1"
Begin
TextBox1
Bounds = 50, 30, 200, 30
AcceptTabs = False
AllowAutoDeactivate = False
AutoDeactivate = False
Backdrop = 0
BackgroundStyle = 0
Border = True
HasShadow = False
Left = 50
Top = 30
TabOrder = 0
Visible = True
WindowStyle = 0
WindowTitle = "TextBox1"
Begin
// 事件处理代码
TextBox1.TextChange【31】 = Sub()
// 当文本框内容改变时,更新父窗口的文本框
Parent.TextBox2.Text = TextBox1.Text
End Sub
End
TextBox2
Bounds = 50, 70, 200, 30
AcceptTabs = False
AllowAutoDeactivate = False
AutoDeactivate = False
Backdrop = 0
BackgroundStyle = 0
Border = True
HasShadow = False
Left = 50
Top = 70
TabOrder = 1
Visible = True
WindowStyle = 0
WindowTitle = "TextBox2"
End
End
End
End
End
TextBox2
Bounds = 50, 150, 300, 30
AcceptTabs = False
AllowAutoDeactivate = False
AutoDeactivate = False
Backdrop = 0
BackgroundStyle = 0
Border = True
HasShadow = False
Left = 50
Top = 150
TabOrder = 1
Visible = True
WindowStyle = 0
WindowTitle = "TextBox2"
End
// 事件处理代码
Window1.OpenAction【32】 = Sub()
// 当窗口打开时,设置文本框的默认文本
TextBox2.Text = "Hello, World!"
End Sub
Window1.CloseAction【33】 = Sub()
// 当窗口关闭时,退出应用程序
Quit【34】
End Sub
Window1.TextChange = Sub()
// 当窗口标题改变时,更新子窗口的标题
ChildWindow1.WindowTitle = Window1.WindowTitle
End Sub
Window1.MouseUpAction【35】 = Sub()
// 当窗口上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in Window"
End Sub
Window1.Panel1.MouseUpAction = Sub()
// 当面板上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in Panel"
End Sub
Window1.TextBox1.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
End Sub
Window1.TextBox2.MouseUpAction = Sub()
// 当文本框上鼠标按下时,更新文本框的文本
TextBox2.Text = "Mouse Up in TextBox2"
Comments NOTHING