Tag: 事件

创建自定义事件

可以为任何对象方法创建自定义事件吗? 要做到这一点,我只使用以下语法?: myObject.myMethod +=new EventHandler(myNameEvent); 以下代码提示此问题: private void btRunProcessAndRefresh_Click(object sender,EventArgs e) { myProcess =new Process(); myProcess.StartInfo.FileName = @”c:\ConsoleApplication4.exe”; myProcess.Exited += new EventHandler(MyProcessExited); myProcess.EnableRaisingEvents =true; myProcess.SynchronizingObject =this; btRunProcessAndRefresh.Enabled =false; myProcess.Start(); }

以编程方式触发控件的事件

假设我有一个WinFoms项目。 只有一个按钮(例如button1 )。 问题是:是否可以通过代码触发ButtonClicked事件而无需单击它?

我可以在Visual Studio中自定义自动事件处理程序生成吗?

当您在代码中订阅事件时,Visual Studio会在+=之后自动完成代码并生成相应的事件处理程序: button.Click += new EventHandler(button_Click); // ↑_____auto generated code_____↑ 请注意它是如何显式创建委托实例的:即使方法组可以从C#2隐式转换为委托,但在VS2010中IDE行为仍然没有改变。 所以我想知道,有没有办法生成这样的代码呢? button.Click += button_Click; 编辑 只是为了让每个人都清楚:上面的代码不在设计器文件中(如果是这种情况,我不会关心使用哪种语法)。 这是在事件名称后键入+=并按TAB时触发的片段 EDIT2 我将此报告为关于Connect的建议 ,如果您还希望更改当前行为,则可以对其进行投票

鼓泡事件。

我在应用程序中有多个层,我发现自己必须将事件冒泡到GUI层以进行状态栏更改等。 。 我发现自己必须编写重复编码,其中每个层只是订阅来自较低层的事件,然后在回调中简单地向上引发一个事件。 有没有更有效的方法呢?

WinForms:响应正在应用的BindingSource

是否有一个事件可以锁定,以便在数据源应用于其绑定控件时得到通知? 还是有另一个事件,我保证数据源已被应用? 我正在使用WinForms(来自WPF)并使用带有数据绑定值的标签,以确定我正在使用的控件类型。 许多控件可以具有相同的标记值,并且我必须使用所需的标记检索控件以执行业务逻辑。 问题是我不知道何时执行搜索标记值。 我在调用后尝试立即搜索标记值: myBindingSource.DataSource = OutputFunctions.Instance; //Yes… I’m binding to a singleton with a list of properties. //Its not the best method, but works. 在我的Form.Load事件处理程序中。 但是,在搜索过程中,我看到标签值未设置。 如果我只是设置数据源,那该怎么办? 从我的表单的内部托管代码隐藏可以看出,我已通过设计器的Property窗口正确设置了值: this.textBoxDTemp.DataBindings.Add(new System.Windows.Forms.Binding( “Tag”, this.myBindingSource, “KNOB_DRIVER_TEMP”, true)); 我已经看过BindingComplete ,老实说看起来非常有前途,除了它在绑定初始化期间没有触发,即使该值应该从数据源传播到目标控件。 编辑:根据要求,数据源首先在表单的内部代码隐藏中设置如下: this.myBindingSource.DataSource = typeof(OutputFunctions); 如果它有帮助,这里是单身人士。 public class OutputFunctions { private static OutputFunctions instance; public static OutputFunctions […]

CA1009:正确声明事件处理程序?

我有以下事件,我class级的消费者可以连接以获取内部诊断消息。 public event EventHandler OutputRaised; 我用这个函数引发事件 protected virtual void OnWriteText(string e) { var handle = this.OutputRaised; if (handle != null) { var message = string.Format(“({0}) : {1}”, this.Port, e); handle(this, message); } } 为什么我正确获取CA1009声明事件处理程序? 我找到的所有答案似乎都不适用于我的场景……只是想了解,我还没有真正掌握事件和代表。 参考CA1009: http : //msdn.microsoft.com/en-us/library/ms182133.aspx

事件订阅格式的差异

订阅事件时这两种格式之间是否存在差异: 风格1: foo.BarEvent += FooEventMethod; 风格2: foo.BarEvent += new FooEventHandler(FooEventMethod);

即使EnableRaisingEvents设置为true,也永远不会调用Process.Exited

我有一个可执行文件,当我手动运行时运行正常,并且它应该与预期输出一样存在。 但是当我使用下面的方法运行它时,Process.Exited事件永远不会被触发。 请注意,我记得Process.EnableRaisingEvents protected override Result Execute(RunExecutable task) { var process = new Process(); process.StartInfo.Arguments = task.Arguments; process.StartInfo.FileName = task.ExecutablePath; process.StartInfo.CreateNoWindow = true; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.EnableRaisingEvents = true; process.Exited += (sender, args) => { processSync.OnNext(new Result { Success = process.ExitCode == 0, Message = process.StandardOutput.ReadToEnd() }); processSync.OnCompleted(); }; process.Start(); return processSync.First();; […]

ASP.NET按钮未在单击事件上触发

我是Asp.net的新手,我的问题可能不那么专业。 我在我的asp.net Web表单项目中使用Udemy.com的设计。 我将udemy的页眉和页脚放在udemy页中。 但是,当我向m web表单中的一个添加按钮时,click事件将不会触发。 protected void Button1_Click1(object sender, EventArgs e) { Page.Title = “Sample Text”; } 为了解决这个问题,我从我的页面中删除了所有脚本。 我还尝试将CausesValidation设置为False。 但没有任何帮助。 你能帮我解决这个问题吗? 更新 我在我的代码中添加了OnClick事件。 但我仍然面临这个问题。

C#:什么是虚拟事件以及它们如何使用?

虚拟活动如何运作? 你会怎么覆盖它? 那会怎么样? 在什么情况下你会这样做? 例如,它是否可以替代受保护的OnEvent方法? 那么inheritance类可以覆盖事件并直接引发它? 或者那是错的还是不行? MSDN对此说了这样的话: 可以使用virtual关键字将事件标记为虚拟事件。 这使派生类可以使用override关键字覆盖事件行为。 还可以密封覆盖虚拟事件的事件,该事件指定对于派生类,它不再是虚拟的。 但这并没有让我更加明智。 密封的东西虽然很明显。 注意:我已经看到了C#中的虚拟事件如何工作? 问题,但它并不是真正的虚拟事件如何工作。 相反,这个人是如何得到他们使用它们得到的结果。 试图弄清楚他的例子和答案中的虚拟事件是什么,但实际上并没有真正理解它。