我有一个可见的UserControl。我不知道的某个地方的自定义属性设置为true
。我所知道的是,将其Visible
属性设置为另一个值(true
)之后,自定义属性为true
。将其值设置为true
是错误的,应该像以前一样保留false
。
我正在使用.NET Framework 4.6.1。我已经搜索了StackOverflow,但没有找到有用的东西。我尝试使用调试器和“监视”窗口,这是我找到的信息的方式。
我调试了程序,并且在显示其他代码之前,当我进入Visible = true
属性时,该值会精确更改。另一个代码是我的UserControl的OnPaint
处理程序,并且在代码的第一行中,自定义属性已经具有此错误值。在进入可见分配之后以及自定义属性采用值true
之前,无法找到内部发生的情况。我想这就像一个Application.DoEvents()
调用或另一个线程。如何调试此代码,以便获得更改自定义属性值的代码?
我已经读过the official documentation,但找不到有用的东西。
internal void SetChildVisible(ClockData td, bool v)
{
foreach (IClockView tv in td.MyTimerViews)
{
if (tv is ClockControl tc &&
tv.GetClocksView() == MyClockListView)
{
tc.Visible = v;
break;
}
}
MyClockListView.RefreshDisplay();
}
我想在Visual Studio的某处有一些选择,以便我可以调试这种情况。
答案 0 :(得分:0)
我通过在自定义属性的设置器中放置一个断点发现了问题。在开始设置Visible
的{{1}}属性之前,调试器将进入设置程序。在设置器中,该属性已经设置为Control
,因此未执行任何更改,因此我走了一步,看看该属性上次从true更改为false的位置。
custom属性是指向以下代码的子控件的custom属性的重定向:
false
问题是我正在设置internal bool ShowCheckBox
{
get
{
return cb.Visible;
}
set
{
if (cb.Visible != value)
{
cb.Visible = value;
OnShowCheckBoxChanged();
}
}
}
属性,并且在使它变为可见/可见的线程之前,我再次设置了cb.Visible
属性,而ShowCheckBox
仍然具有旧的价值。解决方案是将上面的代码更改为以下代码:
cb.Visible