繁体   English   中英

通过反射使用时,不会触发SelectedIndexChange事件

[英]SelectedIndexChange event not firing when using through reflection

我有一个带有listview控件的Windows窗体。 我有一个selectedIndex更改的事件,我正在执行一些操作。 通过反思,我试图设置列表视图的值。 但是事件并没有被解雇。 任何帮助都会有所帮助。

编辑

该事件看起来像

    private void LV1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (LV1.SelectedItems.Count>0)
        {
            if (LV1.SelectedItems[0].Text.ToString() == "testing")
            {
               // Do some work.
            }
        }

    }

我在另一个项目中使用了Relection,并如下更改了所选项目

Assembly a = Assembly.LoadFrom(exePath);
Type formType = a.GetType(formName);
testForm = (Form)a.CreateInstance(formType.FullName);
if (testForm != null)
        {
            Type t1 = testForm.GetType();
            FieldInfo fi = t1.GetField(controlName, flags);
            object ctrl = fi.GetValue(testForm);
            ListView l1 = (ListView)ctrl;    
            l1.Items[0].Selected = true;

        }

自动化另一个应用程序很有趣,但并不是一件容易的事。 有几种选择,但我想其中大多数对您来说范围之外。 一种方法是以编程方式接管鼠标和键盘,并通过这些通道来管理程序。 另一种方式是操纵内存,正如我所说的那样,实现既不琐碎,又不容易更新。

我建议不要尝试使应用程序自动化以查找冲突点。 是否有可以自动化并达到相同结果的服务端点? 您可以改用的应用程序使用的任何API或dll?

如果确实需要使应用程序自动化,则确实存在几个用于执行此操作的框架(通常是出于测试目的而构建)。 我现在能想到的唯一一个是由Assima制造的,用于培训目的。

我认为您的问题在这里:

testForm = (Form)a.CreateInstance(formType.FullName);

您正在创建表单的新实例。 我假设您的主要项目是一个运行表格的exe文件。 然后,您的第二个项目是另一个要运行的exe,它想更改选定的项目。 通过创建表单的新实例,您将更改新表单而不是旧表单上的选定项目。

您需要做的是将表单对象传递到辅助项目。 可能有一些静态方法可以获取表单的单例实例。

我仍然不太确定为什么要使用反射,您可以给第二个项目一个参考。

我要问的第一个问题是:为什么在这里使用反射? 只需通过公共API设置值即可。 如果您在公共API下搞砸了,那么可以:是的,某些事件很可能不会被触发。

或许,如果你能准确地告诉我们你是怎么做的呢?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM