.NET 事件 - 什么是对象发送者

sender 和 eventArgs 是什么意思/指的是什么? 设想: 我正在尝试构建具有删除功能的自定义控件,并且我希望能够删除在包含许多相同自定义控件的页面上单击的控件。 答案 发送者是该操作所针对的控件(例如 OnClick,它是按钮)。 EventArgs 是该事件的实现者可能会发现有用的参数。 克里斯所说的是你可以这样做: protected void someButton_Click (object sender, EventArgs ea) { Button someButton = sender as Button; if(someButton != null) { someButton.Text = "I was clicked!"; } } 来自: stackoverflow.com

AJAX 加载的内容是否获得“document.ready”?

昨天我遇到了一个问题.on('click')我分配的事件处理程序无法正常工作。.on('click')在该元素存在于 DOM 之前,因为它是通过 AJAX 加载的,因此当document.ready()到了那一步。 我用一个尴尬的解决方法解决了这个问题,但我的问题是,如果我要放一个<script>标签在 ajax 加载的内容和另一个document.ready()在那之内,那一秒会不会document.ready()仅在 ajax 内容加载完成后才进行解析?document,如果是这样,是否还有另一个document.ready()在ajax加载的HTML中,我认为它的工作方式是这样的吗? 或者;document.ready()) 答案 回答你的问题:不,一旦 ajax 请求完成,document.ready 就不会再次触发。 要解决您的问题,只需将事件侦听器添加到您将 ajax 内容加载到其中的元素即可。 $( "div.ajaxcontent-container" ).on( "click", "#id-of-the-element-in-the-ajax-content", function() { console.log($( this )); }); 为了#id-of-the-element-in-the-ajax-content您可以使用您将使用的任何选择器$("selector")。div.ajaxcontent-container将被选中。 How it works: 只要div.ajaxcontent-container存在与选择器匹配的所有元素(如果它们现在存在或仅在将来存在)#id-of-the-element-in-the-ajax-content将触发此点击事件。 来自: stackoverflow.com

Android 应用程序上的自定义事件监听器

我需要设置一个简单的事件侦听器来刷新ListView偶尔。 我知道对于按下按键或按钮之类的事件我只需要实现Handler。 我已经做了一切,但还是被困在这里。 答案 定义回调接口 public interface NewsUpdateListener { void onNewsUpdate(<News data to be passed>); } 在获取 RSS 提要的后台线程上提供注册工具 class <Background processing class name> { .... ArrayList<NewsUpdateListener> listeners = new ArrayList<NewsUpdateListener> (); .... public void setOnNewsUpdateListener (NewsUpdateListener listener) { // Store the listener object this.listeners.add(listener); } .... } 当有新闻可用时触发回调 .... for (listener : listeners) { listener.onNewsUpdate(<News data to be passed>); } .... 在初始化期间在某处注册监听器 .... <class <Background processing class object>.registerListener ( new OnNewsUpdateListener() { onNewsUpdate(<News Data>) { // process news data runOnUIThread(new Runnable() { public void run() { // refresh list view } } } } ....

Android:如何通过示例获取任何 KeyPress 事件?

我想在用户按下任意键时获取键值,并根据 android 中按下的键执行操作。 例如 答案 这个问题的答案应该是双重的。 1.) 如果按键是长按菜单键获得的软键盘上按下的结果: 您需要仔细重写以下函数: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_A: { //your Action code return true; } } return super.onKeyDown(keyCode, event); } 2.) 如果您的活动包含 EditText,并且软键盘是从中获取的,则第一种方法不起作用,因为按键事件已被 EditText 消耗。 mMyEditText.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after....

Android覆盖onbackpressed()

有可能覆盖吗onBackPressed()只有一项活动? 在后面的按钮上,我想调用有关特定活动的对话框,但是在所有其他活动中,我希望它能像以前的工作一样工作(转到以前的活动)。 EDITED 谢谢大家的回答,我已经拥有了您所告诉我的一切,但是我的问题是,当我在另一个活动上单击"返回"按钮时,我要参加以前的活动(我的返回按钮覆盖的一项活动)和我以为它不起作用,我认为它是压倒性的onBackPressed()在整个应用程序中,我明白了。 答案 是的。仅在那个Activity和 @Override public void onBackPressed() { // code here to show dialog super.onBackPressed(); // optional depending on your needs } 不要将此代码放在任何其他地方Activity 来自: stackoverflow.com

ASP .NET按钮事件处理程序在第一次点击时不会发射,而是在第二次点击后单击后。

Background: 我正在自定义现有的ASP .NET / C#应用程序。它具有自己的小"框架"和惯例,可以在扩展/自定义其功能时遵循开发人员的惯例。我目前正在扩展其中的一些管理功能,该框架提供了一份合同来执行实施GetAdministrationInterface()方法,该方法返回System.Web.UI.Control。此方法在Page_Load()托管GUI接口的页面方法。 **Problem:**我的GUI中有三个按钮,每个按钮都被分配了一个活动处理程序。我的管理GUI可以很好地加载,但是单击任何按钮并不能执行我希望它们会做的事情。但是,当我第二次单击它们时,按钮可以工作。 我在每个事件处理程序方法的开头放置了断点,并单步执行我的代码。 有任何想法吗? Example of Button Definition (within GetAdministrationInterface) public override Control GetAdministrationInterface() { // more code... Button btn = new Button(); btn.Text = "Click Me!"; btn.Click += new EventHandler(Btn_Click); // more code... } Example of Event Handler Method Definition void Btn_Click(object sender, EventArgs e) { // Do Something } Page_Load Method that calls GetAdministrationInterface protected void Page_Load(object sender, System.EventArgs e) { if (!Page.IsAsync) { List<AdministrationInterface> interfaces = <DATABASE CALL>; foreach(AdministrationInteface ai in interfaces) { placeholderDiv....

asp.net/html:asp.net(.cs)内的HTML按钮的ONCLICK属性

我只想找出是否有办法将我的onclick活动放入.cs中: <button type="submit" runat="server" id="btnLogin" class="button" onclick="btnLogin_Click();"> login_click()应该在.cs中: protected void btnLogin_Click(object sender, EventArgs e) { // do something } 请注意,我不会在此处使用ASP.NET按钮,并且我不会在.html/.aspx中放置我的login_click()事件,以便我无法"公开"我的代码。有什么建议么? 答案 您可以在任何服务器控件上执行此操作,并且通过定义"将此按钮"作为服务器控件。runat=server"。问题可能在于您对事件的定义: <button ... runat="server" ... onServerClick="btnLogin_Click" /> 你不需要"();" 那里… 除此之外,您可以解释为什么您不使用<asp:Button>在这里,因为我真的没有看到这个问题… 来自: stackoverflow.com

C#动态添加事件处理程序

嗨,我有一个简单的问题。这是我的代码: XmlDocument xmlData = new XmlDocument(); xmlData.Load("xml.xml"); /* Load announcements first */ XmlNodeList announcements = xmlData.GetElementsByTagName("announcement"); for (int i = 0; i < announcements.Count; i++) { ToolStripMenuItem item = new ToolStripMenuItem(); item.Name = announcements[i].FirstChild.InnerText; item.Text = announcements[i].FirstChild.InnerText; /* HERE IS WERE I NEED HELP */ item.Click += new EventHandler(); this.freedomMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { item }); } XML LastChild掌握了每次召开的信息。我想创建一个点击事件处理程序,当单击TEH列表项目时,显示一个带有其中数据的消息框。我的问题是我没有如何动态生成事件处理程序来做到这一点:( 答案 尝试: /* HERE IS WERE I NEED HELP */ item.Click += new EventHandler(toolStripClick); 实际处理程序:...

C#模式以防止事件处理程序挂钩两次

重复:如何确保事件仅订阅一次和是否已经添加了活动处理程序? 我有一个单身人士,可以提供一些服务,而我的课堂上的一些活动则挂在其中,有时课程将两次吸引到活动中,然后被称为两次。我正在寻找一种防止这种情况发生的经典方式。不知何故,我需要检查我是否已经迷上了此事件… 答案 明确实施事件并检查调用列表。您还需要检查null: using System.Linq; // Required for the .Contains call below: ... private EventHandler foo; public event EventHandler Foo { add { if (foo == null || !foo.GetInvocationList().Contains(value)) { foo += value; } } remove { foo -= value; } } 使用上面的代码,如果呼叫者多次订阅事件,则将简单地忽略。 来自: stackoverflow.com

e.target 和 e.currentTarget 之间的区别

我不明白其中的区别,它们看起来相同,但我想它们不是。 何时使用其中之一的任何示例将不胜感激。 答案 本的回答是完全正确的 - 所以请记住他所说的。e.target,e.currentTarget与鼠标事件和显示列表相关的工作: e.target=下的老鼠(ben说…e.currentTarget= 点之前的东西…(见下文) 因此,如果实例名称为"btns"的剪辑中有 10 个按钮,并且您可以执行以下操作: btns.addEventListener(MouseEvent.MOUSE_OVER, onOver); // btns = the thing before the dot of an addEventListener call function onOver(e:MouseEvent):void{ trace(e.target.name, e.currentTarget.name); } e.target将是 10 个按钮之一,并且e.currentTarget将始终是"btns"剪辑。 值得注意的是,如果你将MouseEvent改为ROLL_OVER或者设置属性btns.mouseChildren为假,e.target和e.currentTarget两者都将始终是"btns"。 来自: stackoverflow.com

event.preventdefault()与返回false

当我想防止其他事件处理程序发射后执行其他事件时,我可以使用两种技术之一。我将在示例中使用jQuery,但这也适用于普通JS: 1。event.preventDefault() $('a').click(function (e) { // custom handling here e.preventDefault(); }); 2。return false $('a').click(function () { // custom handling here return false; }); 这两种停止事件传播的方法之间是否有显着差异? 为我,return false;比执行方法更简单,更短并且可能少于错误。使用该方法,您必须记住有关正确的外壳,括号,等。 另外,我必须在回调中定义第一个参数才能调用该方法。也许,有一些原因为什么我应该避免这样做并使用preventDefault反而?更好的方法是什么? 答案 return false从在jQuery活动处理程序中 有效地与两者呼叫相同e.preventDefault和e.stopPropagation在过去jQuery.event对象。 e.preventDefault()将防止默认事件发生,e.stopPropagation()将防止活动冒泡,return false将同时做。请注意,此行为与普通的 (非杰克)事件处理程序,其中尤其是return false做不是阻止活动冒泡。 来源:John Resig Any benefit to using event.preventDefault() over “return false” to cancel out an href click? 来自: stackoverflow.com

event.preventdefault()与返回false(无jQuery)

我想知道是否event.preventDefault()和return false我们是一样的。 我已经做好了一些测试,似乎 如果使用旧模型添加了事件处理程序,例如 elem.onclick = function(){ return false; }; 然后,return false防止默认操作,例如event.preventDefault()。 如果添加了事件处理程序addEventListener, 例如 elem.addEventListener( 'click', function(e){ return false; }, false ); 然后,return false不能阻止默认操作。 所有浏览器都这样行事吗? 是否有更多差异event.preventDefault()和return false? 我可以找到一些文档(我无法在MDN中)return false行为event.preventDefault()在某些情况下? 我的问题只是关于普通JavaScript,而不是jQuery,所以请不要将其标记为event.preventdefault()与返回false,即使两个问题的标题几乎相同。 答案 这W3C文档对象模型事件规范在1.3.1。事件注册接口 指出handleEvent在EventListener中没有回报值: handleEvent每当发生EventListener接口注册的类型的事件时,该方法就会称为。[…]No Return Value 在下面1.2.4。事件取消该文件还指出 取消是通过调用事件预防违规方法来完成的。如果一个或多个事件侦听器在事件流的任何阶段拨打预防违规,则将取消默认操作。 这应该阻止您使用任何返回的效果 / fals可以在任何浏览器中具有并使用的效果event.preventDefault()。 Update HTML5规格实际上指定了如何处理返回值不同。HTML规范的第7.1.5.1节指出 如果返回值是webidl boolean false值,请取消事件。 除了"鼠标"事件以外的所有事件。 Conclusion 我仍然建议使用event.preventDefault()在大多数项目中,由于您将与旧规格兼容,从而兼容较旧的浏览器。只有只需要支持尖端浏览器,返回false即可取消才可以。 来自: stackoverflow.com

getSource()和getActionCommand()

什么是GetSource?它返回什么? 什么是GetActionCommand(),它返回了什么? 我对这两个人都可以给我或区分我而感到困惑吗?在UI中,GetSource和GetActionCommand()有什么用?特别是Textfield或Jtextfield? 答案 假设您正在谈论ActionEvent类,然后两种方法之间存在很大的区别。 getActionCommand() 给您一个代表操作命令的字符串。该值是特定于组件的;为一个JButton您可以选择使用setActionCommand(String command)但是JTextField如果您不设置此设置,它将自动为您提供文本字段的值。根据Javadoc的说法,这是与java.awt.TextField。 getSource() 由EventObject班级ActionEvent是一个孩子(通过java.awt.AWTEvent)。 Edit: 这是一个例子。有两个字段,一个字段具有明确设置的动作命令,另一个没有设置。在每个文本中输入一些文本,然后按Enter。 public class Events implements ActionListener { private static JFrame frame; public static void main(String[] args) { frame = new JFrame("JTextField events"); frame.getContentPane().setLayout(new FlowLayout()); JTextField field1 = new JTextField(10); field1.addActionListener(new Events()); frame.getContentPane().add(new JLabel("Field with no action command set")); frame.getContentPane().add(field1); JTextField field2 = new JTextField(10); field2.addActionListener(new Events()); field2.setActionCommand("my action command"); frame.getContentPane().add(new JLabel("Field with an action command set")); frame.getContentPane().add(field2); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(220, 150); frame....

java.awt.eventqueue.invokelater解释说

我很好奇为什么我们必须使用java.awt.EventQueue.invokeLater控制秋千组件。 为什么我们不能在普通线程中这样做?幕后到底发生了什么?从我有一个如果我有一个JFrame我可以在没有任何错误的情况下将可见性从主线程中设置为True或fals,并且似乎有效。所以我到底可以使用java.awt.EventQueue.invokeLater?我也完全知道我可以使用SwingUtilities.invokeLater但作为在这里解释,它们似乎是同一件事。 感谢任何人的解释。希望这是一个有效的问题。 编辑:为了回答Wumpz问题,我们可以创建一个Jframe JFrame frame = new JFrame("Hello world"); frame.setSize(new Dimension(300, 300)); frame.setPreferredSize(new Dimension(300, 300)); frame.setMaximumSize(new Dimension(300, 300)); frame.setMinimumSize(new Dimension(300, 300)); frame.setVisible(true); frame.pack(); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 在同一线程上,它是创建的,请执行以下操作。 for (int i = 0; i < 34; i++) { System.out.println("Main thread setting to "+(!frame.isVisible())); frame.setVisible(!frame.isVisible()); } 也没有投诉。 答案 完整的摆动处理是在一个称为的线程中完成的EDT (Event Dispatching Thread)。因此,如果您要计算此线程中的一些持久计算,则将阻止GUI。 这里的方法是在不同的线程中处理您的计算,以便您的 GUI 保持响应。have to 在EDT内完成。现在EventQueue.invokeLater发挥作用。它发布了一个活动(您Runnable)在Swings事件列表的结尾处,并在处理所有先前的GUI事件后进行处理。 也是EventQueue.invokeAndWait可以在这里。不同之处在于,您的计算螺纹块直到您的GUI更新为止。因此,很明显,不得从EDT使用。 当心not从其他线程更新您的秋千GUI。在大多数情况下,这会产生一些奇怪的更新/清爽问题。 仍然有Java代码从主线程启动简单的Jframe。这可能会导致问题,但不能阻止挥杆。现在,大多数现代IDE都会创建这样的东西来开始GUI: public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new NewJFrame()....

Javascript 滚动处理程序未触发

我想做的就是在DIV已滚动。为简单起见,我没有指定任何其他内容。 我的问题是滚动处理程序永远不会被调用。scroll到click,当我点击时它就起作用了。 请注意:我无法使用 jQuery :( 这是我的代码: HTML: <div id="test">--long content--</div> JS: function myFunc() { console.log('in myFunc'); } var objTable = document.getElementById("test"); objTable.addEventListener("scroll", function () { myFunc(); }, false); FIDDLE: http://jsfiddle.net/yymg5/7/ 答案 这是因为滚动的是窗口而不是 div。这。 window.addEventListener("scroll", function () { myFunc(); }, false); 来自: stackoverflow.com