用户控件之间的通信

时间:2011-03-11 21:48:37

标签: c# winforms user-controls

我有TabControl个标签。一个选项卡有一个商店列表,另一个选项卡有一个员工列表。在商店标签上,我有一个按钮,显示商店的所有员工;要做到这一点,我想切换到另一个选项卡,并从该选项卡的用户控件中调用showEmployeesFromStore(store_id store)方法。我该怎么办?

2 个答案:

答案 0 :(得分:1)

你的心理模型错了。仅仅因为用户控件在TabControl上不可见并不意味着代码也是不可见的。只需在代码中调用控件的方法,它当然需要公开。然后更改选项卡控件的SelectedIndex属性以切换活动选项卡页。

该按钮不应该是第一个用户控件的一部分。实际上,最好不要使用按钮,而只是在用户选择其他商店时触发事件。

答案 1 :(得分:0)

我会在SelectedStoreChanged的商店用户控件上公开一个事件或类似的事情。在事件委托中传回新选择的store_id。

使用您的表单订阅该活动。当事件触发时,表单的工作就是决定处理该信息。在这种情况下,让它从商店UserControl的SelectedStoreChanged事件中提取store_id并将其传递给EmployeeUserControl.showEmployeesFromStore(store_id store)

让你的控件彼此无知。让控件的所有者决定如何对控件引发的任何事件做出反应。随着梦想增加可用性,更好地分离主题区域,以及由于解开奇怪的控制流而更少工作周末,你会睡得更好......; o)

刚刚意识到我错过了一个细节。您正在谈论的按钮应该在表单上,​​而不是任何用户控件,假设您不希望它只是使用上述事件实时更新。点击按钮后,表单应检查StoreUserControl.SelectedStoreID()并将结果传递给EmployeeUserControl.showEmployeesFromStore()