C# Winforms更新和BindingSource更新

C# Winforms更新和BindingSource更新,c#,winforms,bindingsource,C#,Winforms,Bindingsource,有关Winforms更新的一些问题 1) 如果我更新表单,它是否也会更新其所有子控件?Microsoft没有声明任何关于子控件的内容 2) 控件如何失效?假设我有一个在文本中改变的标签。这是否意味着如果我调用Form.Update,标签是否会被视为无效,因此它会被更新(我假设如果Q1为真,那么它会保持不变)?或者我需要调用label控件上的Invalidate以获取更新吗 3) 我有一个连接到BindingSource的DatagridView。我注意到,即使我没有明确地在表单上调用Update

有关Winforms更新的一些问题

1) 如果我更新表单,它是否也会更新其所有子控件?Microsoft没有声明任何关于子控件的内容

2) 控件如何失效?假设我有一个在文本中改变的标签。这是否意味着如果我调用Form.Update,标签是否会被视为无效,因此它会被更新(我假设如果Q1为真,那么它会保持不变)?或者我需要调用label控件上的Invalidate以获取更新吗


3) 我有一个连接到BindingSource的DatagridView。我注意到,即使我没有明确地在表单上调用Update,DatagridView仍然会更新DatagridView(当我添加新行时)。我想知道Winforms BindingSources是否会在后台更新网格?

回答您的问题的关键是理解WinForm

有几种不同类型的感兴趣的事件:

  • 等等等等
要回答您的具体问题:

  • 问:如果我更新一个表单,它是否也会更新其所有子控件

    答:没有。子控件仅在需要时更新-当发生影响该特定控件的更改时

  • 问:控件是如何失效的

    答:我想你的意思是“什么触发了控件更新?”然后回答是“接收控件配置为处理的事件”

  • 问:为什么我的DatagridView会自动更新?Winforms BindingSources是否在后台更新网格

    答:基本上是的

    请查看此处了解更多详细信息:

  • 建议:

    下面是一个工作示例,您可以构建并运行该示例,以更好地了解“幕后”发生了什么:


    Control.Update()是对的直接调用(请参见注释)。与数据或BindingSource操作无关。设置标签的文本是对的间接调用。无效(true)使绘制请求排队,包括控件的子项。Control.Refresh()调用
    Invalidate(true)
    Update()
    ,这意味着刷新此句柄及其子项并立即执行。如果您有与控件内容更新相关的特定问题,请发布有关问题的详细信息,以及问题产生的上下文的描述。所以Form.Update和Control.Update的工作原理不同吗?我注意到Form.Update是即时的,而Control.Form不是。我通过更改标签的文本对其进行了测试。@Drogba Form.Update()就是Control.Update()。Form类派生自控件。Update()方法属于控件类。控件表面绘制的时间取决于许多因素。正如在评论中已经提到的,如果你有一个具体的问题,发布关于这个问题的详细信息。