【发布时间】:2016-11-02 21:12:45
【问题描述】:
我已经搜索过,但找不到这个问题。
在代码中的表单 1 上,我创建了一个包含用户控件的 TabPage,然后将 TabPage 添加到 form1.TabControl 并在用户控件上调用公共方法 LoadData。 问题:当新标签页被激活或获得焦点时,我需要重新加载数据。如果我没有在代码中创建标签页,我可以简单地使用 TabControl 的 selectedIndex 更改事件,但它需要在代码中创建。 我怎样才能做到这一点?表格一:
private void CreateNewTab()
{
TabPage tp1 = new TabPage();
tp1.Text = "HSV";
tp1.Name = "tpHSV";
if (tabContMain.TabPages.ContainsKey(tp1.Name) == false)
{
HSVControl hsvc = new HSVControl();
hsvc.Dock = DockStyle.Fill;
hsvc.LoadData();
tp1.Controls.Add(hsvc);
tabContMain.TabPages.Add(tp1);
}
}
====编辑================ 感谢cmets。让我试着更好地解释我的问题。 selectedIndex 更改事件工作正常。我可以通过它的文本或名称访问选项卡。问题是调用 hsvc.LoadData() 方法。单击包含 hsvc 用户控件的选项卡时,我需要调用此方法。 LoadData() 是公共的,但我找不到在 Form1 中访问它的方法(它包含 selectedIndex 更改事件)。我需要对 hsvc 控件的引用。
我向 Form1 类添加了一个属性,如下所示:
private UserControl mControl;
然后分配它:
HSVControl hsvc = new HSVControl();
hsvc.Dock = DockStyle.Fill;
hsvc.LoadData();
mControl=hsvc;
然后在 SelectedIndex 更改事件中调用它,但它仍然在那里不可见。
【问题讨论】:
-
在这里使用相同的事件。您可以在代码中分配事件处理程序。请参阅此 msdn example。或者查看您的设计器生成的代码,了解它如何处理事件。或者在你的方法中写
tabContMain.SelectedIndexChange +=,然后按两次Tab键。 -
似乎
TabControl.SelectedIndexChanged应该可以正常工作。你遇到什么麻烦了?只是您无法在该事件处理程序中引用 hsvc 吗?如果是这样,只需在表单类中添加一个字段来保存对它的引用。 -
所以在
SelectedIndexChanged事件中调用hsvc.LoadData()。现在我改变了答案。
标签: c# winforms events tabpage