c # Методы - не основанный на событиях метод не добавит элементы управления в форму И все же методы, основанные на событиях, будут. Зачем? - PullRequest
0 голосов
/ 16 октября 2011

Я новичок в c #, поэтому я иду.

Это то, что я изначально думал, что происходит:

У меня есть метод (в php я назвал их функциями), который программно создает таблицу данных и DataGridView, связывает их, а затем добавляет DataGridView в качестве нового элемента управления на панель splitcontainer.

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

Изменение кода метода из этого

private void f_rebuild_jobs_datagrid(object sender, EventArgs e)
{

к этому

private void f_rebuild_jobs_datagrid()
{

предотвращает добавление элементов управления.

Это то, что, по-моему, действительно вызывает проблему:

Следует отметить, что я могу настроить оповещения MessageBox, и они срабатывают, даже когда мы используем лестницу, поэтому работа выполняется, но элемент управления DataGridView не добавит ... и другой тип элемента управления (кнопки, метки и т. Д.) ).

Какой-нибудь совет по моей ошибке?

Следует упомянуть, что когда я не использую кнопку, у меня есть метод в form2, запускающий основную функцию генерации представления данных в первой форме. По сути, у меня есть форма, которая открывается и предлагает пользователю изменить некоторую информацию, а затем после закрытия формы DataGridView должен обновить и отразить изменения.

То, как я вызываю функцию генерации DataGridView из form2:

   this.Close();
   form1 form1 = new form1();
   form1.f_rebuild_jobs_datagrid();

Это было мое решение.

Хотя я до сих пор не уверен, почему функция не может добавить элементы управления, если они выполняются из отдельной формы, я нашел решение своей проблемы, используя .ShowDialog, а не .Show, чтобы открыть мой диалог. Это позволило мне выполнить функцию, естественно, после закрытия диалога. (Источник: http://bytes.com/topic/visual-basic-net/answers/379038-detecting-whether-form-has-been-closed-not)

1 Ответ

1 голос
/ 16 октября 2011

Я не совсем уверен, что происходит, потому что вы не показываете, что делает метод f_rebuild_jobs_datagrid ().Но я предполагаю, что строка form1 form1 = new form1 () создает новую форму form1 и запускает этот метод.Что вы действительно хотели сделать, так это открыть форму form2 с помощью этого вызова:

form2.Show(this);

Тогда вместо создания новой формы1 вы можете вызывать свой метод из формы form2 следующим образом:

((form1)owner).f_rebuild_jobs_datagrid();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...