用户控制BringToFront()事件?

问题描述 投票:0回答:2

我想刷新我的用户控件一个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
}
c# events user-controls
2个回答
2
投票

它似乎更容易只是组这2种方法一起。其简单的明显,其易于维护,你不必下探了其他事件做魔术的事情

public void RefreshMyAwesomeGrid()
{
    using (DatabaseContext db = new DatabaseContext())
    {
        customersBindingSource.DataSource = db.Customers.ToList();
    }
}

...

MyUserControl.BringToFront();
RefreshMyAwesomeGrid();

更新

问题是,我无法从我的主要形式存取权限DataGrid中,我的主窗体上我有一个按钮,一旦按下按钮它带来的用户控件前面,所以我必须把用户控制在DataGridView刷新行动,但我想用一个主要形式的动作来触发它

假设你的DataGrid是你的用户控件。可惜BringToFront不能被重写。但是,你有两个选择。

最简单的,将只是把你的UserControlRefreshMyAwesomeGrid的公共方法。当你调用BringToFront调用RefreshMyAwesomeGrid

如果不是这样,或者只是让你OwnBringToFrontPlusRefresh

或者你可以根据你使用任何框架使用分离型的消息

更新2

只是在挖你的用户控件

private void btnOverview_Click(object sender, EventArgs e)
{
    ccOverview.BringToFront();
    txtTitle.Text = "Healthcare - Overview";
    ccOverview.RefreshGrid(); // exists now
}

0
投票
class Form1 : Form
{
    button1_MouseClick()
    {
        ucr1.BringToFront();
        ucr1.Focus(); // 포커스를 해줘야만 Enter 이벤트가 발동한다. 중요하다.

    }
}

class ucr1 : Usercontrol
{
    private void ucr1_Enter(object sender, eventargs e)
    {
        //do something
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.