Форма ожидания C # на панели - PullRequest
0 голосов
/ 24 июня 2018

У меня есть 3 формы.Имена: MainScreen, LoadingForm, MoviesInfo.Когда я нажимаю кнопку на главном экране, он выполняет некоторые работы, и загружающая форма загружается внутри панели главного экрана. Я хочу сделать, когда работы завершены, показать форму MoviesInfo на той же панели на главном экране или на панели загрузки.,Как я могу это сделать?Я добавляю формы на панель вот так.

public static void AddFormToPanel(Form frm, Panel panel)
        {
            frm.TopLevel = false;
            panel.Controls.Add(frm);
            frm.Show();
            frm.Dock = DockStyle.Fill;
            frm.BringToFront();
        }

//Loading Form
public partial class LoadingForm : Form
    {
        public Action Worker { get; set; }
        public LoadingForm(Action worker)
        {
            InitializeComponent();
            if (worker == null)
            {
                throw new ArgumentNullException();

            }
            Worker = worker;

        }
        private void btnCancel_Click_1(object sender, EventArgs e)
        {
            this.Close();
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            Task.Factory.StartNew(Worker)
                .ContinueWith(t => { this.Close(); }, TaskScheduler.FromCurrentSynchronizationContext());
        }


    }

Форма MainScreen

    private void MovieOnButtonClick(object sender, EventArgs eventArgs)
            {


  using (loading = new LoadingForm(getMovieData))
        {
            loading.ShowDialog(this);
        }

       AddFormToPanel(moviesInfo, panelMain);


            }

Я не хочу загружать эту строку. ShowDialog (this);Я хочу добавить форму загрузки внутри панели.

1 Ответ

0 голосов
/ 24 июня 2018

Переместите действие и элемент управления в MainForm:

private async void MovieOnButtonClick(object sender, EventArgs eventArgs)
{
    var loadingForm = new LoadingForm();    // create a dummy loadingForm
    AddFormToPanel(loadingForm, panelMain);  

    var work = Task.Factory.StartNew(Worker);   // Worker = GetMovies or so
    await work;

    AddFormToPanel(moviesInfo, panelMain);    
    loadingForm.Dispose();
}

Удалите всю логику и события из LoadingForm.

И лучше использовать UserControl, чем Forms, чтобы поместить в негоПанель.

...