×

performclick方法是干什么的

performclick方法是干什么的(在Android studio中如何使用数据来触发button)

admin admin 发表于2023-01-05 20:35:08 浏览40 评论0

抢沙发发表评论

本文目录

在Android studio中如何使用数据来触发button


两种方法实现:

  1. 把button 的 Onclick 实现的功能封装成一个方法,当到达阈值时候不通过button。 而是直接调用你封装好的方法来实现和点击button同样的效果。

  2. 使用Button Api中的performClick();方法来实现模拟点击button。方法说明如下:

    /**
    * Call this view’s OnClickListener, if it is defined.  Performs all normal
    * actions associated with clicking: reporting accessibility event, playing
    * a sound, etc.
    *
    * @return True there was an assigned OnClickListener that was called, false
    *         otherwise is returned.
    */

    如果该view的onclick 已经实现,回调该view的onclick方法。执行所有正常与点击相关的操作。


(C#)自定义控件的PerformClick方法


//这是每个图形的单击事件。
//把每个图形放到单独一个pictureBox控件上。
private void pictClick(object sender, EventArgs e)
{
pnlClick((sender as Control).Parent,null);//panel单击事件
}
//panel单击事件
prvoid void pnlClick(object sender, EventArgs e)
{
}
//如果你不把单独的图形放入,单独的控件的话。
//那就这样。
private void DrawClick()
{
this.ClickEvent();//调用这个方法。
}
private void pnlClick(object sender, EventArgs e)
{
this.ClickEvent();//也调用这个方法。
}

setontouchlistener为什么会出现override performclick警告


由源码可以看出,只要是使用了view.setOnClickListener()方法设置监听器,就会自动触发view.performClick()。
需要注意的是,如果同时使用了view.setOnTouchListener()方法,则有可能存在拦截view.performClick()的响应事件,因为当view.OnTouchEvent()在event.getAction() == MotionEvent.ACTION_DOWN时返回false,系统会认为view不需要处理Touch事件,则后续的Touch事件(move、up、click)就不会被传进来,所以也不会触发view.performClick(),而view.setOnTouchListener()相当于是重写了view.OnTouchEvent(),所以在写view的TouchListener处理时,需要留意view是否存在点击事件监听,如果有,则在适当的位置使用view.performClick()触发点击事件。

C#窗口程序的控件如何触发容器的Click事件


我觉得有两种方式:
第一种:直接的就是foreach(Control ct in this.Controls)
ct.Click += new EventHandler(Form1_Click);
第二种:个人比较喜欢的就是自己开发各个类别的控件,比如textBox类别的控件,然后在这个控件里面定义一个click事件,把要调用的这个通用方法写进去,之后窗体上所有这个类别的控件都会调用这个事件了。不用一个一个绑定。其它类别的控件依次类推。就你用哪种了。
至于你说的performClick方法是为了解决这类问题:点击button2如何触发button1的点击事件?可以在button2的单击事件中加入button1.PreformClick();
解决这类问题还有其它方式,这只是其中的一种而已。
那就反过来写吧:
根据你的补充改成这样:
第一种:直接的就是foreach(Control ct in this.Controls)
{
form1.click+=new EventHandler(“根据控件绑定方法名“);
}
你这个只能一个个判断了,直接把控件的click绑定给form1.click是不行的,C#是不能这样做的,里面只能放方法的名字。

C#在form1初始化后,调用了this.button1.PerformClick,结果没有触发按钮,问题出在哪儿


您好。先来回答您的问题。

我们知道,按钮点击后,会触发一个click事件。

当你将事件关联到一个函数的时候,程序就会执行你想做的事。

比如。界面上有个button1。它的click事件,关联到了button_Click()函数。

这个函数本身的名字是无所谓的,你也可以让它叫做funTest()

然后在将click事件关联的时候改成这个名字

this.button1.Click += new System.EventHandler(this.funTest);

所以,我们回头来看问题里的两种方式。

1、PerformClick()这种方式,是模拟你点击了button1。将点击这个动作传递到按钮。

按照道理,此时应该触发button1_Click(),然后执行里面的语句。

为什么没反应呢?因为你的这句代码写在了窗体的构造函数里。

即使已经执行完毕InitializeComponent(),完成了初始化。但此时,整个窗口并没有被show出来。

所有的定义和属性都还保存在内存之中,窗口没有被生成图形,生成控件图像,因为没有被show出来。所以此时对按钮进行点击是没有作用的。时机太早了。

2、button1_Click(null,null)而这种方式,属于你强行调用了本来应该由按钮触发的事件函数。

你跳过了按钮click触发的这一层,就相当于你调用普通的一个函数一样。所以他当然能够被执行。

但是这种方式并不被推荐,因为原本事件函数中应该正常的接收到sender和e两个参数。这样的代码容易产生空引用错误的隐患。

至少也应该写成 button1_Click(button1,EventArgs.Empty)

那如果要用PerformClick(),在什么时机下用才能有效果呢?

比如:

        protected override void OnLoad(EventArgs e)
        {            
            base.OnLoad(e);
            button1.PerformClick();
        }

你只需要写在OnLoad里,就可以有效果。

因为此时窗口已经接收到Show。

================================题外话==================================

楼主,我看到你的问题,意识到你可能犯了一个新手容易犯的误解。

我猜想,大概是你希望窗体打开的时候,也顺便做一次按钮点击事件里的事。

对于这个问题,一般的解决思路是,将要做的事重构成一个专门的函数进行调用。比如:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            ShowName();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            ShowName();
        }
        private static void ShowName()
        {
            string name = “小明“;
            MessageBox.Show(“我是“ + name + “!“);
        }
    }
}

假设ShowName()这个函数就是你要做的事情。

那么你只需要把它独立出来。

在构造函数末尾,和按钮Click事件函数里都调用它,就可以解决了。

而且,这样一来,当别人阅读代码,阅读到

        public Form1()
        {
            InitializeComponent();
            ShowName();
        }

这里的时候,他看到这个函数名,他也能够理解你想做的是“显示名字”

而不是“点击按钮1”这种不明其意的操作。代码的可读性更好。

明白了吗?谢谢采纳。


C#中如何判定Button按钮是否被点击


又是你啊,你提了好多类似的问题了,我就帮你解答一下吧。我在之前的你的一个提问里看到,你说按等于以后结果一直是0,为什么会这样?我就来解答这个问题。
一,原因:button25也就是你的等于按键被点击以后,它的触发它的源sender是button25,因此无论你怎么判断,z一直是0.另外你这句this.button28.Click += new EventHandler(button25_Click)绑定以后,没有一个东西去触发button28.click事件,也就是说button25_Click方法根本执行不了
二,解决办法:我帮你修改了下你的代码,如下
double x, y;
int i=0;
private void button28_Click(object sender, EventArgs e)
{
x = Convert.ToDouble(label1.Text);
label1.Text = ““;
this.button28.Click += new EventHandler(25Click);
i=1;
}
private void button24_Click(object sender, EventArgs e)
{
x = Convert.ToDouble(label1.Text);
label1.Text = ““;
this.button24.Click += new EventHandler(25Click);
i=2;
}
private void button19_Click(object sender, EventArgs e)
{
x = Convert.ToDouble(label1.Text);
label1.Text = ““;
this.button19.Click += new EventHandler(25Click);
i=3;
}
private void button14_Click(object sender, EventArgs e)
{
x = Convert.ToDouble(label1.Text);
label1.Text = ““;
this.button14.Click += new EventHandler(25Click);
i=4;
}

private void 25Click(object sender, EventArgs e)//这只是一个普通方法
{
y = Convert.ToDouble(label1.Text);
double z=0;
if (sender == this.button28)
z = x + y;
else if (sender == this.button24)
z = x - y;
else if (sender == this.button19)
z = x * y;
else if (sender == this.button14)
z = x / y;

string result =z.ToString(““);
label1.Text = result;
}
private void dengyubutton_Click(object sender, EventArgs e)//这是等于按键的click事件执行的方法
{
switch(a)
{
case 1:button28.PerformClick();break;//PerformClick方法是触发事件
case 2:button24.PerformClick();break;
case 3:button19.PerformClick();break;
case 4:button14.PerformClick();break;
}
}
大概思路就是这样,我没在编译环境调试过,只是提供思路而已。
提醒一下,定义了int i=0,在button的click事件里面,要将i变为1,或者2,3,4
你要用关键字ref,这样就是引用传递了。我上面的代码没写全,您悠着点。
还有什么不懂的,您可以接着提问,谢谢

Android 模拟点击事件


可以直接调用它的监听者,低版本方法是performclick,高版本是callonclick,比如你虚拟手指的初始化的对象是a,你给它设置了动作监听,你点击屏幕下方的按钮时,这个按钮的动作处理中就可以调用a.performclick()或a.callonclick(),这样就调用到了a的监听者,从而达到点击a的效果