C# 更换按钮后,用户控件不显示按钮

C# 更换按钮后,用户控件不显示按钮,c#,winforms,C#,Winforms,我有一个显示从XML加载的按钮的usercontrol。 这是按钮的过载,但仅用于启用按钮上的额外数据 当程序第一次加载按钮时,按钮显示为OK,但如果我更改XML并在控件上再次执行整个构建和添加过程,则按钮不会显示 我认为它可能与绘制过程有关,因为如果在绘图函数中有断点,它也不会显示按钮 以下是添加按钮的功能: _mButtonList在XML加载函数中填充 我希望任何人都能帮忙:-) List\u按钮=新建列表(); 私有void生成_按钮() { Trace.WriteLine(“生成按钮”

我有一个显示从XML加载的按钮的usercontrol。 这是按钮的过载,但仅用于启用按钮上的额外数据

当程序第一次加载按钮时,按钮显示为OK,但如果我更改XML并在控件上再次执行整个构建和添加过程,则按钮不会显示

我认为它可能与绘制过程有关,因为如果在绘图函数中有断点,它也不会显示按钮

以下是添加按钮的功能:

_mButtonList在XML加载函数中填充

我希望任何人都能帮忙:-)

List\u按钮=新建列表();
私有void生成_按钮()
{
Trace.WriteLine(“生成按钮”);
尝试
{
SuspendLayout();
控件。清除();
foreach(按钮中的POS按钮b)
b、 处置();
_按钮。清除();
foreach(列表中的按钮pb)
{
Trace.WriteLine(“--”+pb.Name+“-”+pb.Text+“-位置:“+pb.Location.X+”,“+pb.Location.Y+”-大小:“+pb.Size.Width+”,“+pb.Size.Height”);
_添加(pb.Get_按钮(大小,单位宽度));
_按钮[_buttons.Count-1].BringToFront();
_按钮[\u buttons.Count-1]。单击+=e\u uc\u ButtonBox\u单击;
控件。添加(_buttons[_buttons.Count-1]);
_按钮[_buttons.Count-1]。无效();
}
}
捕获(例外情况除外)
{
调试。打印(例如消息);
}
最后
{
使无效();
简历布局(真实);
刷新();
}
}

这是一个与您的业务代码相关的非常具体的问题,我们没有所有的代码来帮助您。快速查看您的代码,看起来还可以,但如果没有更多信息,就无法完成更多的工作。您是否在pb.Get_按钮(大小,_oneUnitWidth)处设置断点,它返回按钮?顺便说一句,代码看起来很混乱,只需声明Button的一个变量并使用它,而不是访问列表,如:var btn=pb.Get_按钮(大小,_oneUnitWidth);您好,谢谢。您关于将列表更改为变量的建议解决了问题。使用列表的原因是能够在刷新时处理按钮
    List<posButton> _buttons = new List<posButton>();

    private void generate_Buttons()
    {
        Trace.WriteLine("Generate buttons");
        try
        {
            SuspendLayout();

            Controls.Clear();

            foreach (posButton b in _buttons)
                b.Dispose();

            _buttons.Clear();

            foreach (posButton pb in _mButtonList)
            {
                Trace.WriteLine("  ---  " + pb.Name + " - " + pb.Text + " - Location: " + pb.Location.X + "," + pb.Location.Y + " - Size: " + pb.Size.Width + "," + pb.Size.Height);
                _buttons.Add(pb.Get_Button(Size, _oneUnitWidth));

                _buttons[_buttons.Count - 1].BringToFront();
                _buttons[_buttons.Count - 1].Click += e_uc_ButtonBox_Click;
                Controls.Add(_buttons[_buttons.Count - 1]);
                _buttons[_buttons.Count - 1].Invalidate();

            }
        }
        catch (Exception ex)
        {
            Debug.Print(ex.Message);
        }
        finally
        {
            Invalidate();
            ResumeLayout(true);
            Refresh();
        }
    }