自学内容网 自学内容网

B4X编程语言:B4A控件事件汇总

        一、B4A控件事件汇总列表

序号事件名称触发时机适用控件
1Click用户单击控件时触发Activity、Button、ImageView、Label、Panel、TabHost
2LongClick用户长按控件时触发Activity、Button、ImageView、Label、Panel、TabHost
3Touch触摸屏幕时触发Activity、Panel
4KeyPress用户按下按键时触发Activity
5KeyUp用户释放按键时触发Activity
6ItemClick用户单击列表项时触发ListView、Spinner
7ItemLongClick用户长按列表项时触发ListView
8CheckedChange控件选择状态改变时触发CheckBox、RadioButton、ToggleButton
9EnterPressedEnter键按下时触发EditText
10FocusChanged控件获取或失去焦点时触发EditText
11TextChanged控件文本发生变化时触发EditText
12ScrollChanged控件滚动位置发生变化时触发HorizontalScrollView、ScrollView
13ValueChanged控件的值发生改变时触发SeekBar
14TabChangedTab(选项卡)切换时触发TabHost
15OverrideUrlWebView加载网页中的链接时触发WebView
16PageFinishedWeb页面加载完成后触发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三个控件。不管是由选中状态变为未选中状态,还是由未选中状态变为选中状态,只要状态发生改变,就会触发该事件。
        假设有RadioButton1RadioButton2两个单选按钮,两个只能选中一个,可以用项下面代码:

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.HeightScrollView滚动面板的高度。
        只有当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


原文地址:https://blog.csdn.net/yshzsl1968/article/details/144332087

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!