age*_*154 11 c# tabcontrol winforms
我正在检查TabControl的内置.net控件的来源,我看到它在决定是否向集合添加或插入TabPage之前引用此属性.
if (this.owner.IsHandleCreated)
{
this.owner.AddTabPage(tabPage, tabPage.GetTCITEM());
}
else
{
this.owner.Insert(this.owner.TabCount, tabPage);
}
Run Code Online (Sandbox Code Playgroud)
这两个函数最终实现了相同的目标 - 它们将TabPage添加到内部"TabPages"集合的末尾......但我只是不明白为什么它应该与您使用的函数有关.
this指的ControlCollection是覆盖内置的Control.ControlCollection.owner是使用的TabControl ControlCollection.
Chr*_*ain 13
TabControl的AddTabPage方法(创建句柄时调用的AddNativeTabPage方法)调用该方法.这反过来调用SendMessage和PostMessage(有效地,Control.Invoke和Control.BeginInvoke)添加标签页.这些方法将选项卡页面添加到UI线程,因此控件在内部遵守不应与后台线程中的UI控件交互的规则.
这实际上意味着如果已创建句柄,AddTabPage则可以安全地从非UI线程调用(对于UI控件来说非常不寻常!).不幸的是,这也意味着AddTabPage如果TabControl还没有句柄,该方法将阻止,因为没有UI线程泵送消息,因此除非创建句柄,否则不应该调用它.
对于好奇,这是在TabControl.ControlsCollection课堂上,在Add方法中.
| 归档时间: |
|
| 查看次数: |
5520 次 |
| 最近记录: |