我的c#winforms程序有一个tabcontrol,其中有几个标签显示列表视图,标签,按钮等。加载时不会显示标签页。简化的代码如下所示:
public main()
{
InitializeComponent();
removeTabPages(); //removes all but one; deleting this line doesn't change anything
main_tabcontrol.SelectedIndex = 0; //doesn't change anything no matter where i put it
loadData();
doSomeCalculations();
addTabPages();
main_tabcontrol.SelectedIndex = 2; //same issue if i pick any other tab here
}
private void Tabs_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateDataInTab();
}
这会加载一些数据,做一些计算然后切换到tabpage 2.我希望看到loadData()和doSomeCalculations()函数处理的数据显示出来。相反,它会显示默认值(大多数情况下没有),直到我切换到另一个选项卡然后再返回。这也验证了Tabs_SelectedIndexChanged()按预期工作。
我想了解为什么会发生这种情况以及如何使其按计划运作。
运行loadData()和doSomeCalculations()作为异步任务,并等待它们,确实解决了这个问题,但它打开了许多其他问题,我想避免它(我不需要这个异步)。因为我的问题恰恰相反(我需要代码运行同步),所以这不应该是解决方案。
答案 0 :(得分:1)
这是因为你在构造函数中有它,最好把它放在负载上:
private void main_Load(object sender, EventArgs e)
{
main_tabcontrol.SelectedIndex = 0;
loadData();
doSomeCalculations();
main_tabcontrol.SelectedIndex = 2;
}
答案 1 :(得分:0)
要使用“加载事件”,请双击表单上的空白区域,或使用“属性资源管理器”并切换到事件。