Пользовательский элемент управления BringToFront () Событие? - PullRequest
0 голосов
/ 26 июня 2018

Я хочу обновить представление данных в моем пользовательском элементе управления, я вызываю пользовательский элемент управления с помощью BringToFront ();действие в моей основной форме, есть ли какое-либо событие, чтобы я мог обновить представление данных, когда пользовательский элемент управления установлен на передний план?что-то вроде:

Пользовательский элемент управления: (имеет представление данных: 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 ]

0 голосов
/ 08 февраля 2019
class Form1 : Form
{
    button1_MouseClick()
    {
        ucr1.BringToFront();
        ucr1.Focus(); // 포커스를 해줘야만 Enter 이벤트가 발동한다. 중요하다.

    }
}

class ucr1 : Usercontrol
{
    private void ucr1_Enter(object sender, eventargs e)
    {
        //do something
    }
}
0 голосов
/ 26 июня 2018

Кажется, проще просто сгруппировать эти 2 метода вместе. Он прост, он очевиден, его легко обслуживать, и вам не нужно совершать другие события, чтобы творить чудеса

* ** 1003 тысяча два * Пример
public void RefreshMyAwesomeGrid()
{
    using (DatabaseContext db = new DatabaseContext())
    {
        customersBindingSource.DataSource = db.Customers.ToList();
    }
}

...

MyUserControl.BringToFront();
RefreshMyAwesomeGrid();

Обновление

Дело в том, что я не могу получить доступ к таблице данных из моей основной формы, на моя основная форма у меня есть кнопка, и как только эта кнопка нажата, она приносит пользовательский элемент управления вперед, поэтому я должен поставить обновление datagridview действие в пользовательском элементе управления, но я хочу, чтобы вызвать его с главной формой Действие

Предполагая, что ваша DataGrid находится в вашем userControl ... К сожалению, BringToFront не может быть переопределен. Однако у вас есть пара вариантов.

Самое простое, просто поместите публичный метод в UserControl class RefreshMyAwesomeGrid. при звонке BringToFront звоните RefreshMyAwesomeGrid

Либо так, либо просто сделайте свой OwnBringToFrontPlusRefresh <- хотя, кажется, немного меха </p>

Или вы можете использовать развязанные сообщения в зависимости от того, используете ли вы какие-либо фреймворки

Обновление 2

Просто покопайтесь в вашем пользовательском элементе управления

private void btnOverview_Click(object sender, EventArgs e)
{
    ccOverview.BringToFront();
    txtTitle.Text = "Healthcare - Overview";
    ccOverview.RefreshGrid(); // exists now
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...