我想刷新我的用户控件一个DataGridView,我所呼叫的用户控制用BringToFront();我的主要形式的行动,没有任何事件,所以我可以刷新的datagridview一旦用户控制设置为前?就像是:
自定义控制:(拥有的datagridview:dgvCustomers)
namespace Healthcare
{
public partial class Overview : UserControl
{
public Overview()
{
InitializeComponent();
}
public void RefreshGrid()
{
using (DatabaseContext db = new DatabaseContext())
{
customersBindingSource.DataSource = db.Customers.ToList();
}
}
private void Overview_Load(object sender, EventArgs e)
{
RefreshGrid();
}
}
}
主要形式有:
private void btnOverview_Click(object sender, EventArgs e)
{
ccOverview.BringToFront();
txtTitle.Text = "Healthcare - Overview";
RefreshGrid(); // Does not exist in the current context
}
它似乎更容易只是组这2种方法一起。其简单的明显,其易于维护,你不必下探了其他事件做魔术的事情
例
public void RefreshMyAwesomeGrid()
{
using (DatabaseContext db = new DatabaseContext())
{
customersBindingSource.DataSource = db.Customers.ToList();
}
}
...
MyUserControl.BringToFront();
RefreshMyAwesomeGrid();
更新
问题是,我无法从我的主要形式存取权限DataGrid中,我的主窗体上我有一个按钮,一旦按下按钮它带来的用户控件前面,所以我必须把用户控制在DataGridView刷新行动,但我想用一个主要形式的动作来触发它
假设你的DataGrid是你的用户控件。可惜BringToFront
不能被重写。但是,你有两个选择。
最简单的,将只是把你的UserControl
类RefreshMyAwesomeGrid
的公共方法。当你调用BringToFront
调用RefreshMyAwesomeGrid
如果不是这样,或者只是让你OwnBringToFrontPlusRefresh
或者你可以根据你使用任何框架使用分离型的消息
更新2
只是在挖你的用户控件
private void btnOverview_Click(object sender, EventArgs e)
{
ccOverview.BringToFront();
txtTitle.Text = "Healthcare - Overview";
ccOverview.RefreshGrid(); // exists now
}
class Form1 : Form
{
button1_MouseClick()
{
ucr1.BringToFront();
ucr1.Focus(); // 포커스를 해줘야만 Enter 이벤트가 발동한다. 중요하다.
}
}
class ucr1 : Usercontrol
{
private void ucr1_Enter(object sender, eventargs e)
{
//do something
}
}