一、B4A控件事件汇总列表
序号 | 事件名称 | 触发时机 | 适用控件 | 1 | Click | 用户单击控件时触发 | Activity、Button、ImageView、Label、Panel、TabHost | 2 | LongClick | 用户长按控件时触发 | Activity、Button、ImageView、Label、Panel、TabHost | 3 | Touch | 触摸屏幕时触发 | Activity、Panel | 4 | KeyPress | 用户按下按键时触发 | Activity | 5 | KeyUp | 用户释放按键时触发 | Activity | 6 | ItemClick | 用户单击列表项时触发 | ListView、Spinner | 7 | ItemLongClick | 用户长按列表项时触发 | ListView | 8 | CheckedChange | 控件选择状态改变时触发 | CheckBox、RadioButton、ToggleButton | 9 | EnterPressed | Enter键按下时触发 | EditText | 10 | FocusChanged | 控件获取或失去焦点时触发 | EditText | 11 | TextChanged | 控件文本发生变化时触发 | EditText | 12 | ScrollChanged | 控件滚动位置发生变化时触发 | HorizontalScrollView、ScrollView | 13 | ValueChanged | 控件的值发生改变时触发 | SeekBar | 14 | TabChanged | Tab(选项卡)切换时触发 | TabHost | 15 | OverrideUrl | WebView加载网页中的链接时触发 | WebView | 16 | PageFinished | Web页面加载完成后触发 | WebView | 二、B4A控件事件说明
1、Click事件和LongClick事件
要使用这两个事件,必要将控件的事件命名为 “控件名_Click” 或 “控件名_LongClick”,然后在该事件的代码块中编写相应的代码。例如:
- Sub Button1_Click
- ToastMessageShow("点击了Button1按钮", True)
- End Sub
- Sub ImageView1_LongClick
- ToastMessageShow("长按了ImageView", True)End Sub
- End Sub
复制代码 2、Touch事件
在B4A中,可以使用容器类控件(Activity、Panel)的Touch事件来处置惩罚触摸操作。当用户按下屏幕时,触发Down事件;当用户抬起手指时,触发Up事件;当用户按下并移动手指时,触发Move事件。简朴示例代码如下:
- Sub Panel1_Touch (Action As Int, X As Float, Y As Float)
- Select Action
- Case Activity.ACTION_DOWN
- ToastMessageShow("按下屏幕", True)
- Case Activity.ACTION_UP
- ToastMessageShow("抬起手指", True)
- Case Activity.ACTION_MOVE
- Log("手指所在坐标:X="&X&",Y="&Y)
- End Select
- End Sub
复制代码 在上述代码中,当用户在屏幕上按下或抬起手指时,会触发Panel1_Touch事件。在事件处置惩罚过程中,使用Select语句根据Action参数的值来判定手指的触摸方式,如果是按下或抬起,就使用ToastMessageShow函数显示相应的提示信息,如果是触屏移动,就向日记输脱手指触摸点的位置坐标。
注意:
我们只有在Panel1控件范围内触摸才有反应,因为这是Panel1的触摸事件。
移动手指输出的触摸点坐标是Activity平面坐标,以Activity页面左上角为(0,0)点。
当Panel1内有其它控件,触摸到其它控件时没有反应,因为这些控件遮挡了Panel1,你触摸的是这些控件,而不是Panel1。
要得到以Panel1左上角为(0,0)点的Panel1平面坐标,必要使用Panel1.ACTION_DOWN、Panel1.ACTION_UP、Panel1.ACTION_MOVE来判定。有兴趣的朋友可以试一下。
使用Panel1平面坐标可以得到Panel1内某个控件(如Button1)的坐标范围是:X>=Button1.Left And X<=Button1.Left+Button1.Width And Y>=Button1.Top And Y<=Button1.Top+Button1.Height
要想为Panel1内的控件添加反应事件,我们可以依据其坐标区域判读按的是哪个控件,并为其添加实行代码。我们可以向Panel1添加一个透明的Panel2,与Panel1大小也一样,必须添加到顶层(最后添加,以掩蔽其它控件),并使用以下代码:
- Sub Panel2_Touch (Action As Int, X As Float, Y As Float)
- Select Action
- Case Panel2.ACTION_UP
- If X>=Button1.Left And X<=Button1.Left+Button1.Width
- _And Y>=Button1.Top And Y<=Button1.Top+Button1.Height Then
- ' 添加代码(相当于Button1_Cliick代码)
- End If
- If X>=Button2.Left And X<=Button2.Left+Button2.Width
- _And Y>=Button2.Top And Y<=Button2.Top+Button2.Height Then
- ' 添加代码(相当于Button2_Cliick代码)
- End If
- ...
- End Select
- End Sub
复制代码 3、KeyPress和KeyUp事件
在B4A中,KeyPress和KeyUp事件用于检测按键是否被按下或释放。KeyPress事件在按键被按下时触发。KeyUp事件在按键被释放时触发。
- Sub Activity_KeyPress (KeyCode As Int) As Boolean
- If KeyCode = KeyCodes.KEYCODE_BACK Then
- ToastMessageShow("按下了返回键", True)
- Return True
- End If
- End Sub
- Sub Activity_KeyUp (KeyCode As Int) As Boolean
- If KeyCode = KeyCodes.KEYCODE_BACK Then
- ToastMessageShow("释放了返回键", True)
- Return True
- End If
- End Sub
复制代码 注意:
KeyPress和KeyUp事件只能在Activity中使用。
KeyPress事件仅在焦点所在的视图不处置惩罚相应按键事件时才会被触发。如果焦点所在的视图处置惩罚了相应按键事件,KeyPress事件将不会被触发。
4、ItemClick和ItemLongClick事件
在B4A中,ListView控件是一种常用的用于展示数据列表的控件。ListView控件具有ItemClick和ItemLongClick事件,可以用于处置惩罚列表中每个项的点击和长按事件。
ItemClick事件在用户点击列表项时触发,可以通过以下代码为ListView的每个项设置ItemClick事件:
Sub ListView1_ItemClick (Index As Int)
'处置惩罚点击事件
End Sub
ItemLongClick事件在用户长按列表项时触发,可以通过以下代码为ListView的每个项设置ItemLongClick事件:
Sub ListView1_ItemLongClick (Index As Int)
'处置惩罚长按事件
End Sub
在上述代码中,ListView1是ListView控件的名称,Index是触发事件的列表项的索引。可以根据索引来获取相应的列表项数据,并实行相应的操作。
5、CheckedChange事件
CheckedChange事件在控件选择状态改变时触发,重要用于CheckBox、RadioButton、ToggleButton三个控件。不管是由选中状态变为未选中状态,还是由未选中状态变为选中状态,只要状态发生改变,就会触发该事件。
假设有RadioButton1、RadioButton2两个单选按钮,两个只能选中一个,可以用项下面代码:
- Private Sub RadioButton1_CheckedChange(Checked As Boolean)
- If Checked Then
- RadioButton2.Checked=False
- End If
- End Sub
- Private Sub RadioButton2_CheckedChange(Checked As Boolean)
- If Checked Then
- RadioButton1.Checked=False
- End If
- End Sub
复制代码 6、EnterPressed事件
B4A中的 EnterPressed事件用于捕获用户按下回车键的操作。这个事件通常与输入框EditText控件一起使用,用于实行特定的操作或处置惩罚用户输入。
Sub EditText1_EnterPressed
' 在这里编写回车键被按下时的操作代码
End Sub
请注意,在 B4A 中,要使用 `EnterPressed` 事件,必要安装 B4XLibsGUI 库。
7、FocusChanged事件
FocusChanged事件在控件EditText获取或失去焦点时触发。常用于控件输入数据的合法性检验。
例如:当我们完成EditText1的输入,进入EditText2输入时,EditText1失去焦点,EditText2得到焦点,这两个控件均触发了FocusChanged事件。我们可以在EditText1失去焦点时检验其数据的合法性,如果不合法,将焦点移回EditText1以修改和重新输入数据。
- Private Sub EditText1_FocusChanged (HasFocus As Boolean)
- If HasFocus=False Then
- Dim a As String=EditText1.Text.Trim
- If a.Length=0 Then
- xui.MsgboxAsync("您还没有输入数据!","提示")
- EditText1.RequestFocus
- Return
- Else
- If a.Length>10 Then
- xui.MsgboxAsync("您输入的数据超出了10个字符,请修改!","提示")
- EditText1.RequestFocus
- Return
- End If
- End If
- End If
- End Sub
复制代码 8、TextChanged事件
在B4A中,可以使用TextChanged事件来响应EditText控件文本发生变化的事件。通过添加TextChanged事件的处置惩罚步伐,可以在用户输入文本时实行特定的操作。
EditText控件每新增或删除一个字符,都会引发TextChanged事件。我们可以依据此特性进行输入限定,可以限定输入的字符,也可以限定输入的字符串长度。
下面示例限定输入字符串最大长度是5个字符,凌驾5个字符Text将不会发生变化:
- Private Sub EditText1_TextChanged (Old As String, New As String)
- If New.Length>5 Then
- EditText1.Text=Old
- EditText1.SelectionStart = EditText1.Text.Length '将光标定在末尾
- End If
- End Sub
复制代码 9、ScrollChanged事件
当ScrollView的滚动位置发生变化时,该事件处置惩罚步伐都会被调用,当前滚动位置作为参数传递给该事件例程。
假设在页面有一个ScrollView1控件和一个lblLog文本标签(用于显示ScrollView1相关数据),我们用代码向其滚动面板添加两个文本标签:lblTop, lblBottom,分别添加到滚动面板的顶端和底端。通过ScrollChanged事件在滚动面板滚动时向lblLog输送及时信息。代码如下:
- Sub Globals
- Private ScrollView1 As ScrollView
- Private ListView1 As ListView
- Private lblTop, lblBottom As Label
- Private lblLog As Label
- End Sub
- Sub Activity_Create(FirstTime As Boolean)
- Activity.LoadLayout("Layout")
- ScrollView1.Panel.Height = ScrollView1.Height * 2
-
- lblTop.Initialize("")
- ScrollView1.Panel.AddView(lblTop, 0, 0, ScrollView1.Width, 40dip)
- lblTop.Color = Colors.Blue
- lblTop.TextColor = Colors.White
- lblTop.Text = "Top"
-
- lblBottom.Initialize("")
- ScrollView1.Panel.AddView(lblBottom, 0, ScrollView1.Panel.Height - 40dip, ScrollView1.Width, 40dip)
- lblBottom.Color = Colors.Red
- lblBottom.TextColor = Colors.Blue
- lblBottom.Text = "Bottom"
-
- ScrollView1.ScrollPosition=ScrollView1.Height
- End Sub
- Private Sub ScrollView1_ScrollChanged(Position As Int)
- lblLog.Text = $"ScrollView1.Height: ${ScrollView1.Height}
- ScrollView1.Panel.Height: ${ScrollView1.Panel.Height}
- Position: ${Position}
- lblBottom bottom: ${(lblBottom.Top + lblBottom.Height)}"$
- End Sub
复制代码 运行以上代码,我们可以很好地明白ScrollView控件的运行机理和ScrollChanged事件的应用。
备注:
ScrollView视图的Height属性是ScrollView视图的显示窗口高度。
ScrollView的Panel.Height是ScrollView滚动面板的高度。
只有当Panel.Heigh大于Height时才有滚动发生。
ScrollView视图的ScrollPosition属性是显示窗口的最顶端处在滚动面板的位置。当没有滚动时,ScrollPosition的值是0,当向上滚动时,滚动面板向上滚动了多少,ScrollPosition的值就是多少,它体现了以显示窗口最顶端为基线的滚动面板的及时位置。
ScrollView控件其实就是在有限空间内显示大于其显示平面的内容的容器。
10、ValueChanged事件
B4A中的ValueChanged事件是指当控件的值发生改变时触发的事件。该事件重要应用于SeekBar控件,SeekBar控件是用于显示和调整进度的滑动条控件,它可以让用户调整音量、亮度、速度、大小等事项。
下面示例通过SeekBar的ValueChanged事件,逐步改变Panel1的背景致。
Private Sub SeekBar1_ValueChanged (Value As Int, UserChanged As Boolean)
Dim value1 As Int=Value*255/100
Panel1.Color=Colors.RGB(value1,value1,value1)
End Sub
参数Value是滑块位置值,最在最左侧为0、最右侧为100。
如果Value由用户滑动滑块改变,则UserChanged=True;如果Value由代码改变,则UserChanged=False。
11、TabChanged事件
TabChanged事件是用于处置惩罚Tab(选项卡)切换时触发的事件。
在B4A中,可以使用TabHost控件来实现选项卡功能。TabHost控件中有一个TabChanged事件,可以在该事件中编写代码来响应选项卡切换事件。
以下示例代码,演示如何使用TabHost和TabChanged事件:
- Sub Activity_Create(FirstTime As Boolean)
- Activity.LoadLayout("Layout")
- Dim p1,p2 As Panel
- p1.Initialize("p1")
- p2.Initialize("p2")
- TabHost1.AddTab2("第一页",p1)
- TabHost1.AddTab2("第二页",p2)
- End Sub
- Sub TabHost1_TabChanged
- Dim tabs As String
- If TabHost1.CurrentTab=0 Then
- tabs="第一页"
- Else
- tabs="第二页"
- End If
- ToastMessageShow("当前Tab页:"&tabs,True)
- End Sub
复制代码 12、OverrideUrl和PageFinished事件
OverrideUrl和PageFinished事件是B4A中WebView控件中的两个事件。
OverrideUrl事件在WebView加载网页中的链接时触发,在该事件中,可以通过检查URL来决定WebView是否必要打开链接。
PageFinished事件是在Web页面加载完成后触发的事件。在该事件中,可以添加只有在完成网页加载后才气实行的代码。
以下是简朴的示例代码,演示如何使用这两个事件:
- Private Sub WebView1_OverrideUrl (Url As String) As Boolean
- ' 在此处添加代码判断是否打开链接
- If Url.Contains("163.com") Then
- ' 如果链接包含 "163.com",则WebView加载链接
- Return False
- Else
- ' 如果链接不包含 "163.com",则不加载链接
- Return True
- End If
- End Sub
- Private Sub WebView1_PageFinished (Url As String)
- Log("网页加载完成!加载的网址是:"&Url)
- End Sub
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |