Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C在另一个方法(在第三方dll中定义)完成后触发一个方法_C#_Events_Methods_Append - Fatal编程技术网

C# C在另一个方法(在第三方dll中定义)完成后触发一个方法

C# C在另一个方法(在第三方dll中定义)完成后触发一个方法,c#,events,methods,append,C#,Events,Methods,Append,这可能属于方法扩展、重写或多态性的范畴。我对C和OO还不熟悉,所以请原谅,我还在学习:- 我有一个应用程序,是利用第三方API。在API中,有一种对自定义控件执行右键单击+选择操作的方法。该控件是一个图像查看器,用户可以在其中右键单击并循环到父组中存在的另一个图像 在我有限的理解中,我认为这两件事中的一件将需要发生,无论哪一件是可以做到的,还是哪一件是一个好的解决方案,都是悬而未决的 我不想覆盖现有的方法,我只想以某种方式附加到它。 如果有一种方法可以检测特定事件何时被触发和完成,那么调用我的方

这可能属于方法扩展、重写或多态性的范畴。我对C和OO还不熟悉,所以请原谅,我还在学习:-

我有一个应用程序,是利用第三方API。在API中,有一种对自定义控件执行右键单击+选择操作的方法。该控件是一个图像查看器,用户可以在其中右键单击并循环到父组中存在的另一个图像

在我有限的理解中,我认为这两件事中的一件将需要发生,无论哪一件是可以做到的,还是哪一件是一个好的解决方案,都是悬而未决的

我不想覆盖现有的方法,我只想以某种方式附加到它。 如果有一种方法可以检测特定事件何时被触发和完成,那么调用我的方法。设置某种类型的侦听器(如果可用)。
谢谢

由于您没有发布任何参考资料,我将尝试概述一些方法

如果有活动

CustomControl cc = yourCustomControl;
cc.SelectionCompleted += (sender, args) => { YourMethod() };
这是一个使用lambda的异常事件处理程序

另一种方法是:

public class Form1 : Form
{
   public Form1()
   {
      this.cc.SelectionCompleted += HandlerSelectionCompleted;
   }
   public void HandlerSelectionCompleted(object sender, EventArgs e)
   {
      YourCustomMethod();
   }
}
有一种方法可以重写

public class YourCustomControl : CustomControl
{
   public override void Selection()
   {
      base.Selection(); // first call the original method

      // now do some custom stuff
   }
}

由于您没有发布任何参考资料,我将尝试概述一些方法

如果有活动

CustomControl cc = yourCustomControl;
cc.SelectionCompleted += (sender, args) => { YourMethod() };
这是一个使用lambda的异常事件处理程序

另一种方法是:

public class Form1 : Form
{
   public Form1()
   {
      this.cc.SelectionCompleted += HandlerSelectionCompleted;
   }
   public void HandlerSelectionCompleted(object sender, EventArgs e)
   {
      YourCustomMethod();
   }
}
有一种方法可以重写

public class YourCustomControl : CustomControl
{
   public override void Selection()
   {
      base.Selection(); // first call the original method

      // now do some custom stuff
   }
}

您不能重写该方法:如果该方法不受保护/虚拟/抽象,或者您不能从该组件的类派生,那么这是正确的。 您可以在组件中搜索事件,并猜测是否没有任何文档说明在所需操作之后触发了哪个事件。并实际执行该事件句柄中的代码

可能还有其他黑客手段,但我个人会避免做类似的事情,如果不是出于个人激情,而是专注于重新构建我的程序,以便尽可能满足需求并支持该组件


关于。

您不能重写该方法:如果该方法不受保护/虚拟/抽象,或者您不能从该组件的类派生,则是这样。 您可以在组件中搜索事件,并猜测是否没有任何文档说明在所需操作之后触发了哪个事件。并实际执行该事件句柄中的代码

可能还有其他黑客手段,但我个人会避免做类似的事情,如果不是出于个人激情,而是专注于重新构建我的程序,以便尽可能满足需求并支持该组件


关于。

您所描述的是面向方面编程AOP的租户。如果您想插入第三方.NET dll,我建议您使用PostSharp,您所描述的是面向方面编程AOP的租户。如果您想插入第三方.NET dll,我建议您使用PostSharp

如果没有事件或虚拟方法的公开验证,这将很困难。你能在你的问题中包括这个对象的接口吗?似乎没有,正如我在下面所说的,我甚至不能在控件上放置我自己的单击事件。如果没有事件或虚拟方法的公共exosure,这将很困难。你能在你的问题中包括这个对象的接口吗?似乎没有,正如我在下面说的,我甚至不能在控件上放置我自己的单击事件。事实证明,我甚至不能访问正在触发的第三方方法。api没有给我事件。事实上,我甚至无法将自己的标准mouseclick事件添加到自定义控件中,因此在这一点上,我似乎遇到了麻烦。事实证明,我甚至无法访问正在触发的第三方方法。api没有给我事件。事实上,我甚至不能将自己的标准mouseclick事件添加到自定义控件中,因此在这一点上,我似乎遇到了麻烦。