值不能为空,参数名称为child或descendant

本文关键字:child descendant 参数 不能 | 更新日期: 2023-09-27 18:02:00

这几行代码导致我的usercontrol在设计器中返回上述错误。
我遗漏了什么吗?

    private void renewContext()
    {
        if (context != null)
        {
            context.Dispose();
            context = new SM_Context();
        }
        else
        {
            context = new SM_Context();
        }
    }
    private void tabPasswords_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.Source is TabControl)
        {
            TabControl tab = (TabControl)e.Source;
            switch (tab.SelectedIndex)
            {
                default:
                    break;
                case 0:
                    btnAP_Reset_Click(null, null);
                    btnEP_Reset_Click(null, null);
                    break;
                case 1:
                    btnEP_Reset_Click(null, null);
                    break;
                case 2:
                    btnAP_Reset_Click(null, null);
                    headEditPassword_Loaded(null, null);
                    break;
            }
        }
    }

问题不在于按钮,我敢肯定,问题只在于上下文。
我发现,由于一些安全原因,标签改变了,不允许我更新其中的上下文。
那么我如何才能做到这一点呢?

值不能为空,参数名称为child或descendant

正如lazyberezovsky建议的那样:尝试从事件处理程序(btnAP_Reset_Click等)中提取您想要执行的逻辑。它可以像这样:

private void tabPasswords_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (e.Source is TabControl)
    {
        TabControl tab = (TabControl)e.Source;
        switch (tab.SelectedIndex)
        {
            default:
                break;
            case 0:
                context = new SM_Context();
                ResetAp();
                ResetEp();
                break;
            case 1:
                context = new SM_Context();
                ResetEp();
                break;
            case 2:
                context = new SM_Context();
                ResetAp();
                WhatEverThisDoes();
                break;
        }
    }
}
private void ResetAp()
{
    // ...
}
private void ResetEp()
{
    // ...
}
private void WhatEverThisDoes()
{
    // ...
}
private void btnAP_Reset(object sender, EventArgs e)
{
    ResetAp();
}
private void btnEP_Reset(object sender, EventArgs e)
{
    ResetEp();
}
private void headEditPassword_Loaded(object sender, EventArgs e)
{
    WhatEverThisDoes();
}

你应该听听那些写了一些关于这个问题的评论的家伙-但是如果你决定使用按钮点击-你可以调用button.PerformClick()

它看起来像这样:

 btnAP_Reset.PerformClick();

这将不会发送nullvalues作为参数到您的click事件的实现。