Tag: events

使用自动化框架在textfield / textbox上设置文本并获取更改事件

我想使用Mircosoft UI Automation框架在textfield / textbox元素上设置文本,这意味着在ControlType.Edit或ControlType.Document的AutomationElement 。 目前我正在使用TextPattern从其中一个AutomationElements获取文本: TextPattern tp = (TextPattern)element.GetCurrentPattern(TextPattern.Pattern); string text = tp.DocumentRange.GetText(-1).Trim(); 但是现在我想在AutomationElement设置一个新文本。 我在TextPattern类中找不到这个方法。 所以我正在尝试使用ValuePattern但我不确定这是否是正确的方法: ValuePattern value = element.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern; value.SetValue(insertText); 还有其他方法来设置文本值吗? 另一个问题是如何在Edit / Document元素上更改文本时获取事件? 我尝试使用TextChangedEvent但是在更改文本时我没有触发任何事件: AutomationEventHandler ehTextChanged = new AutomationEventHandler(text_event); Automation.AddAutomationEventHandler(TextPattern.TextChangedEvent, element, TreeScope.Element, ehTextChanged); private void text_event(object sender, AutomationEventArgs e) { Console.WriteLine(“Text changed”); }

如何在C#中引用事件

我有以下类,它有一个名为LengthChanged公共事件: class Dimension { public int Length { get { return this.length; } set { if (this.length != value) { this.length = value; this.OnLengthChanged (); } } protected virtual void OnLengthChanged() { var handler = this.LengthChanged; if (handler != null) { handler (this, System.EventArgs.Empty); } } public event System.EventHandler LengthChanged; private int length; } 我希望能够在一个名为Observer的方法中注册/取消注册此事件的处理程序,该方法对Dimension类一无所知。 […]

Listview ItemSelectionChanged发射两次?

我在C#中有一个带有ListView控件的Winforms应用程序。 此ListView显示TO-DO项目列表,我使用’ItemSelectionChanged’事件来处理更新。 问题是’ItemSelectionChanged’事件每次尝试进行更新时都会触发两次。 ItemSelectionChanged事件刷新表单以表示更新(即从列表中删除项目)。 有没有办法在刷新后禁用事件? UPDATE1: private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { if (e.IsSelected) { listView1.Items[e.ItemIndex].Remove(); listView1.SelectedIndices.Clear(); listView1.Focus(); listView1.Update(); } else { } }

如何在C#中使用OnPaint事件?

我在网站上看到了一些类似的问题,但没有一个真正帮助过我。 我有一个函数,当单击一个按钮时,它会在窗体上绘制几行,这些按钮的形状会根据用户在某些文本框中输入的值而变化。 我的问题是,当我最小化forms时,线条消失,我明白这可以通过使用OnPaint事件来解决,但我真的不明白如何。 任何人都可以给我一个简单的例子,使用函数在按下按钮时使用OnPaint事件绘制一些东西吗?

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 }); […]

Winforms – 可视化删除按钮单击事件

.NET新手提醒 使用Visual C#2008 Express Edition我不小心为按钮创建了一个单击事件。 然后我删除了自动创建的方法代码,这导致了一个错误,表示现在已经在表单加载代码中引用的函数无法再找到。 从Form1.Designer.cs文件的InitializeComponent()函数中删除以下行… this.btnCopy.Click += new System.EventHandler(this.btnCopy_Click); …似乎可以解决这个问题,但是,由于#region开头的以下警告,它让我觉得很脏! /// Required method for Designer support – do not modify /// the contents of this method with the code editor. 我无法使用表单设计器找到一种方法来执行此操作,我认为这是此警告隐含的方法。 这样做的正确方法是什么?

如何在C#中使用WMI事件

有一些事件通过WMI公开,但我似乎找不到订阅和被提醒这些事件的任何示例。 特别是我想实现WmiMonitorBrightnessEvent来向Growl / Snarl发送通知。

为事件定义空委托主体是一个好习惯吗?

可能重复: 在事件声明中添加匿名空委托是否有缺点? 为事件定义一个空的委托主体是一个好习惯,这样你就不必担心引发一个没有事件处理程序的事件了吗? (无需检查事件是否为空)。 像下面的代码: public event EventHandler LoadedData = delegate { };

正确命名C#事件和处理程序

从我读过的内容来看,我不确定我是否有事件和处理程序的命名约定。 (似乎有一些相互矛盾的建议)。 在下面的两个类中,任何人都可以告诉我,如果我有事件的命名权限,引发事件的方法和处理事件的方法? public class Car { // is event named correctly? public event EventHandler OnSomethingHasHappened; private void MoveForward() { RaiseSomethingHasHappened(); } // is the named correctly private void RaiseSomethingHasHappened() { if(OnSomethingHasHappened != null) { OnSomethingHasHappened(this, new EventArgs()); } } } 和订户类: public class Subscriber() { public Subscriber() { Car car = new Car(); car.OnSomethingHasHappened […]

通过放弃.NET中的标准EventHandler模​​式我会失去什么?

.NET中的事件有一个标准模式 – 它们使用一个delegate类型,它接受一个名为sender的普通对象,然后是第二个参数中的实际“payload”,它应该从EventArgs派生。 从EventArgs派生的第二个参数的基本原理似乎非常清楚(请参阅.NET Framework标准库带注释的参考 )。 它旨在确保随着软件的发展,事件接收器和源之间的二进制兼容性。 对于每个事件,即使它只有一个参数,我们派生一个自定义事件参数类,它具有包含该参数的单个属性,这样我们就可以保留在未来版本中向有效负载添加更多属性而不破坏现有客户端代码的能力。 。 在独立开发组件的生态系统中非常重要。 但我发现零参数也是如此。 这意味着如果我的第一个版本中有一个没有参数的事件,我会写: public event EventHandler Click; ……然后我做错了。 如果我将来的委托类型更改为新的类作为其有效负载: public class ClickEventArgs : EventArgs { … …我将破坏与客户的二进制兼容性。 客户端最终绑定到一个内部方法add_Click的特定重载,它接受EventHandler ,如果我更改了委托类型,那么他们就找不到那个重载,所以有一个MissingMethodException 。 好的,那么如果我使用方便的通用版本怎么办? public EventHandler Click; 不,仍然是错的,因为EventHandler不是EventHandler 。 因此,要获得EventArgs的好处,您必须从中获取,而不是直接使用它。 如果你不这样做,你也可以不使用它(在我看来)。 然后是第一个参数, sender 。 在我看来,这似乎是一个邪恶耦合的配方。 事件触发本质上是一个函数调用。 一般来说,函数是否应该能够通过堆栈挖掘并找出调用者是谁,并相应地调整其行为? 我们是否应该强制接口看起来像这样? public interface IFoo { void Bar(object caller, int actualArg1, …); } […]