值不能为null,参数名称为子或后代

时间:2013-03-04 13:00:49

标签: c# wpf user-controls

这些代码行导致我的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;
            }
        }
    }

问题不在于按钮而且我确定,问题仅在于上下文 由于某些安全原因发现标签已更改,不允许我更新其中的上下文 那我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

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();
}

答案 1 :(得分:0)

你应该对那些对这个问题写过一些评论的人有所了解 - 但是如果你被确定使用按钮点击 - 你可以致电button.PerformClick()

它看起来像这样:

 btnAP_Reset.PerformClick();

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