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