Невозможно обновить пользовательский интерфейс формы при срабатывании события для загрузки формы с помощью панели управлC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно обновить пользовательский интерфейс формы при срабатывании события для загрузки формы с помощью панели управл

Сообщение Anonymous »

У меня возникла проблема при использовании панели для загрузки содержимого формы посредством запуска события.
Моя структура приложения включает в себя:Моя структура приложения включает в себя: Strong>
Домашняя форма: включает в себя 3 формы (форму A, форму B и форму C). Его можно загрузить через меню слева.
Когда я нажимаю на меню A, меню B или меню C: на главной панели домашней формы будет загружено содержимое формы A или формы B. или форма C.
В форме A у меня есть 3 дочерние формы (форма A1, форма A2, форма A3): по умолчанию при загрузке формы A. Панель содержимого формы A загрузит форму A1 и отобразит ее.
Я обновляю панель содержимого, вызывая событие. Его можно изменить с формы A1 на форму A2 и форму A3 и сбросить на форму A1.
В моем коде, когда панель добавляет новую форму, я удалю предыдущую форму и закрою ее. чтобы уменьшить использование памяти.
Моя проблема:

Когда мое событие сработало, панель содержимого формы A добавить новую форму, но пользовательский интерфейс формы A1 не обновляется или не отображается A2 Форма, форма A3, она по-прежнему отображает форму A1, если я запускаю изменение формы A2 или формы A3.
Но когда я использую больше событий для запуска, пользовательский интерфейс обновляется нормально. Я не хочу использовать это решение для своего приложения. Пожалуйста, помогите мне. Большое спасибо.
Извините, если мой английский не очень хорош.
Как подготовить это дело:
Когда AForm активен, я регистрирую шину событий и отменяю регистрацию при закрытии AForm.
Пример: Когда есть триггер события: приложение позвоню EventBus.Instance.PostEvent("READ_CARD_STEPS.FINISH"); чтобы отправить событие в субкризер AForm, после этого вызовите InitFormContent(new A1Form(this.pnVerifyContentBox)); для загрузки A1Form
Я не могу обновить пользовательский интерфейс A1Form, я хочу изменить текст метки и показать его

Код: Выделить всё

 private void updateUIShowMessage(string message)
{
if (this.InvokeRequired)
{
this.Invoke((MethodInvoker)(() =>
{
this.lbCardMessage.Visible = true;
this.lbCardMessage.Text = message;
this.rdMessageCard.Visible = true;
}));
}
else
{
this.lbCardMessage.Visible = true;
this.lbCardMessage.Text = message;
this.rdMessageCard.Visible = true;
this.lbCardMessage.Refresh(); // Label not update or show
this.rdMessageCard.Refresh(); // Can't refresh UI
AppLog.Instance.Write("updateUIShowMessage: " + message);
}
}
Функция InitFormContent вызовет эту функцию

Код: Выделить всё

FormAction.Instance.LoadContentForm(contentF, this.pnVerifyContentBox, true);
this.pnVerifyContentBox: панель содержимого формы A
contentF: необходимо загрузить новую форму
Это мой код:

Код: Выделить всё

public void LoadContentForm(Form f, Panel pnContainer, bool isCleanForm)
{
try
{
//Form f = frmChild as Form;
if (pnContainer == null)
{
AppLog.Instance.Write("LOAD FORM " + f?.ToString() + " BUT ERROR: pnContainer is null");
return;
}

if (isCleanForm && prevForm != null && (prevForm.Name != "AForm" && prevForm.Name != f.Name))
{
AppLog.Instance.Write("-------- CLEAN " + prevForm?.Name?.ToString() + " UI -------------");
prevForm.Close();
prevForm.Dispose();
GC.SuppressFinalize(this);
}

if (pnContainer?.Controls?.Count > 0)
pnContainer?.Controls?.RemoveAt(0);
pnContainer?.Controls?.Clear();
pnContainer?.Refresh();

f.TopLevel = false;
f.Dock = DockStyle.Fill;
f.Opacity = 100;
f.Visible = true;

pnContainer?.Controls.Add(f);
pnContainer.Tag = f;
pnContainer.Visible = true;
currentPanel = pnContainer;
prevForm = f;
f.Show();

AppLog.Instance.Write("CURRENT ACTIVE PANEL: " + pnContainer?.Controls[0].Name + " and Active Form: " + f.Name);
}
catch (Exception ex)
{
AppLog.Instance.Write("LOAD FORM " + f?.ToString() + " BUT ERROR: "  + ex.Message.ToString());
}

}
Некоторые журналы при трассировке:

Код: Выделить всё

\\\\\\\[16:06:21.750\\\\\\\]: AForm OnEventBus: CARD_STATUS.EMPTY

\\\\\\\[16:06:21.752\\\\\\\]: RESET SCAN CARD DATA

\\\\\\\[16:06:21.753\\\\\\\]: RESET SCAN CARD INFO

\\\\\\\[16:06:21.755\\\\\\\]: RESET SCAN CARD STATE

\\\\\\\[16:06:21.757\\\\\\\]: RESET CARD VERIFY INFO

\\\\\\\[16:06:21.759\\\\\\\]: AForm OnEventBus: RESET_CARD_COMPLETED

\\\\\\\[16:06:21.760\\\\\\\]: A1Form InitializeComponent

\\\\\\\[16:06:21.832\\\\\\\]: CURRENT ACTIVE PANEL: A1Form and Active Form: A1Form

\\\\\\\[16:06:21.996\\\\\\\]: STOP TIMER PRVENT CALL VERIFY CARD

\\\\\\\[16:06:22.646\\\\\\\]: AForm OnEventBus: READ_CARD_STEPS.SCANCARD

\\\\\\\[16:06:22.716\\\\\\\]: updateUIShowMessage: Start Scan Card

\\\\\\\[16:06:23.034\\\\\\\]: AForm OnEventBus: READ_CARD_STEPS.CONNECT_CARD

\\\\\\\[16:06:23.456\\\\\\\]: updateUIShowMessage: Start Connect Card

\\\\\\\[16:06:23.591\\\\\\\]: AForm OnEventBus: READ_CARD_STEPS.READ_DGS

\\\\\\\[16:06:23.821\\\\\\\]: updateUIShowMessage: Start read dgs

\\\\\\\[16:06:25.310\\\\\\\]: AForm OnEventBus: READ_CARD_STEPS.FINISH

\\\\\\\[16:06:25.311\\\\\\\]: updateUIShowMessage: Read card finish

\\\\\\\[16:06:25.313\\\\\\\]: AForm OnEventBus: READ_CARD_STATUS.SUCCESS

\\\\\\\[16:06:25.315\\\\\\\]: GO TO A2Form

\\\\\\\[16:06:25.323\\\\\\\]: -------- CLEAN A1Form UI -------------

\\\\\\\[16:06:25.339\\\\\\\]: CURRENT ACTIVE PANEL: A2Form and Active Form: A2Form

\\\\\\\[16:06:25.341\\\\\\\]: A2Form SHOW

\\\\\\\[16:06:25.343\\\\\\\]: RESET CARD VERIFY INFO

\\\\\\\[16:06:25.345\\\\\\\]: AForm OnEventBus: FACE_CAPTURE_STATUS.RESET

\\\\\\\[16:06:27.275\\\\\\\]: FACE CAPTURE SUCCESS

\\\\\\\[16:06:27.276\\\\\\\]: CAPTURE FACE CLOSED

\\\\\\\[16:06:27.278\\\\\\\]: AForm OnEventBus: FACE_CAPTURE_STATAUS.SUCCESS

\\\\\\\[16:06:27.280\\\\\\\]: START TIMER PRVENT CALL VERIFY CARD

\\\\\\\[16:06:27.287\\\\\\\]: CALL API TO VERIFY ID CARD

\\\\\\\[16:06:27.578\\\\\\\]: VERIFY CARD SUCCESS WITH AUTO CALL VERIFY

\\\\\\\[16:06:27.580\\\\\\\]: AForm OnEventBus: SCAN_CARD_DONE

\\\\\\\[16:06:27.582\\\\\\\]: STOP TIMER PRVENT CALL VERIFY CARD

\\\\\\\[16:06:27.583\\\\\\\]: SHOW CARD INFO COMPLETED SCANNED FROM SCAN STEP

\\\\\\\[16:06:27.585\\\\\\\]: A3Form InitializeComponent

\\\\\\\[16:06:27.594\\\\\\\]: -------- CLEAN A2Form UI -------------

\\\\\\\[16:06:27.595\\\\\\\]: A2Form_FormClosed

\\\\\\\[16:06:27.597\\\\\\\]: CAPTURE FACE CLOSED

\\\\\\\[16:06:27.618\\\\\\\]: CURRENT ACTIVE PANEL: A3Form and Active Form: A3Form

\\\\\\\[16:06:27.634\\\\\\\]: -------- CLEAN A3Form UI -------------

\\\\\\\[16:06:28.030\\\\\\\]: A1Form InitializeComponent
Мое ожидание: я хочу обновить пользовательский интерфейс формы через панель с любым событием, имеющим триггер, и очистить память, если форма неактивна.

Подробнее здесь: https://stackoverflow.com/questions/792 ... el-control
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»