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

打印 上一主题 下一主题

主题 825|帖子 825|积分 2475

        一、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”,然后在该事件的代码块中编写相应的代码。例如:
  1. Sub Button1_Click
  2.     ToastMessageShow("点击了Button1按钮", True)
  3. End Sub
  4. Sub ImageView1_LongClick
  5.     ToastMessageShow("长按了ImageView", True)​​​​​​​End Sub
  6. End Sub
复制代码
        2、Touch事件

        在B4A中,可以使用容器类控件(Activity、Panel)的Touch事件来处置惩罚触摸操作。当用户按下屏幕时,触发Down事件;当用户抬起手指时,触发Up事件;当用户按下并移动手指时,触发Move事件。简朴示例代码如下:
  1. Sub Panel1_Touch (Action As Int, X As Float, Y As Float)
  2.    Select Action
  3.                 Case Activity.ACTION_DOWN
  4.                         ToastMessageShow("按下屏幕", True)
  5.                 Case Activity.ACTION_UP
  6.                         ToastMessageShow("抬起手指", True)
  7.                 Case Activity.ACTION_MOVE
  8.                         Log("手指所在坐标:X="&X&",Y="&Y)
  9.         End Select
  10. 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大小也一样,必须添加到顶层(最后添加,以掩蔽其它控件),并使用以下代码:
  1. Sub Panel2_Touch (Action As Int, X As Float, Y As Float)
  2.     Select Action                       
  3.          Case Panel2.ACTION_UP
  4.               If X>=Button1.Left And X<=Button1.Left+Button1.Width 
  5.                             _And Y>=Button1.Top And Y<=Button1.Top+Button1.Height Then
  6.                   ' 添加代码(相当于Button1_Cliick代码)
  7.               End If
  8.               If X>=Button2.Left And X<=Button2.Left+Button2.Width 
  9.                            _And Y>=Button2.Top And Y<=Button2.Top+Button2.Height Then
  10.                   ' 添加代码(相当于Button2_Cliick代码)
  11.               End If
  12.               ...
  13.     End Select
  14. End Sub
复制代码
        3、KeyPress和KeyUp事件

        在B4A中,KeyPress和KeyUp事件用于检测按键是否被按下或释放。KeyPress事件在按键被按下时触发。KeyUp事件在按键被释放时触发。
  1. Sub Activity_KeyPress (KeyCode As Int) As Boolean 
  2.     If KeyCode = KeyCodes.KEYCODE_BACK Then  
  3.           ToastMessageShow("按下了返回键", True)  
  4.           Return True
  5.     End If  
  6. End Sub
  7. Sub Activity_KeyUp (KeyCode As Int)  As Boolean
  8.     If KeyCode = KeyCodes.KEYCODE_BACK Then   
  9.           ToastMessageShow("释放了返回键", True)
  10.           Return True 
  11.     End If  
  12. 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两个单选按钮,两个只能选中一个,可以用项下面代码:
  1. Private Sub RadioButton1_CheckedChange(Checked As Boolean)
  2.         If Checked Then
  3.                 RadioButton2.Checked=False
  4.         End If
  5. End Sub
  6. Private Sub RadioButton2_CheckedChange(Checked As Boolean)
  7.         If Checked Then
  8.                 RadioButton1.Checked=False
  9.         End If
  10. 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以修改和重新输入数据。
  1. Private Sub EditText1_FocusChanged (HasFocus As Boolean)
  2.         If HasFocus=False Then
  3.                 Dim a As String=EditText1.Text.Trim
  4.                 If a.Length=0 Then
  5.                         xui.MsgboxAsync("您还没有输入数据!","提示")
  6.                         EditText1.RequestFocus                       
  7.                         Return
  8.                 Else
  9.                         If a.Length>10 Then
  10.                                 xui.MsgboxAsync("您输入的数据超出了10个字符,请修改!","提示")
  11.                                 EditText1.RequestFocus
  12.                                 Return
  13.                         End If
  14.                 End If
  15.         End If
  16. End Sub
复制代码
        8、TextChanged事件

        在B4A中,可以使用TextChanged事件来响应EditText控件文本发生变化的事件。通过添加TextChanged事件的处置惩罚步伐,可以在用户输入文本时实行特定的操作。
        EditText控件每新增或删除一个字符,都会引发TextChanged事件。我们可以依据此特性进行输入限定,可以限定输入的字符,也可以限定输入的字符串长度。
        下面示例限定输入字符串最大长度是5个字符,凌驾5个字符Text将不会发生变化:        
  1. Private Sub EditText1_TextChanged (Old As String, New As String)       
  2.         If New.Length>5 Then
  3.                 EditText1.Text=Old
  4.                 EditText1.SelectionStart = EditText1.Text.Length '将光标定在末尾       
  5.         End If               
  6. End Sub
复制代码
        9、ScrollChanged事件

        当ScrollView的滚动位置发生变化时,该事件处置惩罚步伐都会被调用,当前滚动位置作为参数传递给该事件例程。
        假设在页面有一个ScrollView1控件和一个lblLog文本标签(用于显示ScrollView1相关数据),我们用代码向其滚动面板添加两个文本标签:lblTop, lblBottom,分别添加到滚动面板的顶端和底端。通过ScrollChanged事件在滚动面板滚动时向lblLog输送及时信息。代码如下:
  1. Sub Globals
  2.     Private ScrollView1 As ScrollView
  3.         Private ListView1 As ListView
  4.         Private lblTop, lblBottom As Label
  5.     Private lblLog As Label
  6. End Sub
  7. Sub Activity_Create(FirstTime As Boolean)
  8.         Activity.LoadLayout("Layout")
  9.         ScrollView1.Panel.Height = ScrollView1.Height * 2
  10.        
  11.         lblTop.Initialize("")
  12.         ScrollView1.Panel.AddView(lblTop, 0, 0, ScrollView1.Width, 40dip)
  13.         lblTop.Color = Colors.Blue
  14.         lblTop.TextColor = Colors.White
  15.         lblTop.Text = "Top"
  16.        
  17.         lblBottom.Initialize("")
  18.         ScrollView1.Panel.AddView(lblBottom, 0, ScrollView1.Panel.Height - 40dip, ScrollView1.Width, 40dip)
  19.         lblBottom.Color = Colors.Red
  20.         lblBottom.TextColor = Colors.Blue
  21.         lblBottom.Text = "Bottom"
  22.        
  23.     ScrollView1.ScrollPosition=ScrollView1.Height
  24. End Sub
  25. Private Sub ScrollView1_ScrollChanged(Position As Int)
  26.         lblLog.Text = $"ScrollView1.Height: ${ScrollView1.Height}
  27.                                           ScrollView1.Panel.Height: ${ScrollView1.Panel.Height}       
  28.                                           Position: ${Position}
  29.                                           lblBottom bottom: ${(lblBottom.Top + lblBottom.Height)}"$
  30. 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事件:        
  1. Sub Activity_Create(FirstTime As Boolean)
  2.         Activity.LoadLayout("Layout")
  3.         Dim p1,p2 As Panel
  4.         p1.Initialize("p1")
  5.         p2.Initialize("p2")       
  6.         TabHost1.AddTab2("第一页",p1)
  7.         TabHost1.AddTab2("第二页",p2)       
  8. End Sub
  9. Sub TabHost1_TabChanged       
  10.         Dim tabs As String
  11.         If TabHost1.CurrentTab=0 Then
  12.                 tabs="第一页"
  13.         Else
  14.                 tabs="第二页"
  15.         End If
  16.         ToastMessageShow("当前Tab页:"&tabs,True)
  17. End Sub
复制代码
        12、OverrideUrl和PageFinished事件

        OverrideUrl和PageFinished事件是B4A中WebView控件中的两个事件。
        OverrideUrl事件在WebView加载网页中的链接时触发,在该事件中,可以通过检查URL来决定WebView是否必要打开链接。
        PageFinished事件是在Web页面加载完成后触发的事件。在该事件中,可以添加只有在完成网页加载后才气实行的代码。
        以下是简朴的示例代码,演示如何使用这两个事件:
  1. Private Sub WebView1_OverrideUrl (Url As String) As Boolean
  2.         ' 在此处添加代码判断是否打开链接
  3.         If Url.Contains("163.com") Then               
  4.                 ' 如果链接包含 "163.com",则WebView加载链接
  5.                 Return False
  6.         Else               
  7.                 ' 如果链接不包含 "163.com",则不加载链接
  8.                 Return True
  9.         End If
  10. End Sub
  11. Private Sub WebView1_PageFinished (Url As String)
  12.         Log("网页加载完成!加载的网址是:"&Url)
  13. End Sub
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表