C#PropertyGrid属性鼠标单击事件

C#PropertyGrid属性鼠标单击事件,c#,listview,event-handling,mouseevent,propertygrid,C#,Listview,Event Handling,Mouseevent,Propertygrid,我有两个选项卡页面,每个页面上都有列表视图和属性网格。选项卡1上的MyListView中的每个对象都有一个字段,其中包含MyListView2中对象的名称。当我鼠标单击此字段时,我想选择选项卡页面2,然后查找并选择所需的对象 我很高兴进一步的代码能够在调试模式下正常工作。尽管当我尝试在调试文件夹中启动可执行文件时,在鼠标单击所需字段后出现了“对象引用未设置为对象实例”异常。 我想,这是在PrintPropertyGrid()方法中使用ActiveControl后的结果,尽管我还不知道如何以另一种

我有两个选项卡页面,每个页面上都有列表视图属性网格选项卡1上的MyListView中的每个对象都有一个字段,其中包含MyListView2中对象的名称。当我鼠标单击此字段时,我想选择选项卡页面2,然后查找并选择所需的对象

我很高兴进一步的代码能够在调试模式下正常工作。尽管当我尝试在调试文件夹中启动可执行文件时,在鼠标单击所需字段后出现了“对象引用未设置为对象实例”异常。 我想,这是在PrintPropertyGrid()方法中使用ActiveControl后的结果,尽管我还不知道如何以另一种方式实现它

如何摆脱这个例外

private void MyListView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
    if (MyListView.IsHandleCreated)
        if (MyListView.SelectedIndices.Count > 0)
            PrintPropertyGrid(MyListView.SelectedIndices[0]);
}

private void PrintPropertyGrid(int index)
{
    MyPropertyGrid.SelectedObject = MyList[index];
    foreach (Control c in MyPropertyGrid.ActiveControl.Controls)
        c.MouseClick += new MouseEventHandler(propertyGrid_MouseClick);
}

private void propertyGrid_MouseClick(object sender, MouseEventArgs e)
{
    if (MyPropertyGrid.SelectedGridItem.PropertyDescriptor.Name.Equals("Conversion"))
    {
        string name;
        name = MyPropertyGrid.SelectedGridItem.Value.ToString();
        tabControl1.SelectedTab = tabPage2;
        if (!String.IsNullOrWhiteSpace(name))
        {
            ListViewItem foundItem = MyListView2.FindItemWithText(name, false, 0, true);
            if (foundItem != null)
                foundItem.Selected = true;
        }
    }
}

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
   at myProject.FormMain.PrintPropertyGrid(Int32 selector, PropertyGrid propertyGrid, Int32 index) in c:\Users\Admin\Documents\Visual Studio2012\Projects\myProject\myProject\FormMain.cs:line 96
   at myProject.FormMain.MyListView2_ItemSelectionChanged(Object sender, ListViewItemSelectionChangedEventArgs e) in c:\Users\Admin\Documents\Visual Studio2012\Projects\myProject\myProject\FormMain.cs:line 286
   at System.Windows.Forms.ListView.OnItemSelectionChanged(ListViewItemSelectionChangedEventArgs     e)
   at System.Windows.Forms.ListView.WmReflectNotify(Message& m)
   at System.Windows.Forms.ListView.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

什么是异常完整堆栈框架?不知道是否收到您的评论,无论如何,我添加了异常文本。因此,使用源代码行,您可以知道什么是null。我想它是SelectedGridItem或SelectedGridItem.Value第一行指向“foreach(MyPropertyGrid.ActiveControl.Controls中的控件c)”,这就是我怀疑ActiveControl的原因。啊,好吧,可能是的。您可能需要检查以下内容: