在面板上等待表单 C#
Wait Form C# On Panel
我有3个表格。名称:MainScreen、LoadingForm、MoviesInfo。
当我按下 MainScreen 上的按钮时,它正在做一些工作并且 LoadingForm 正在加载到 MainScreen.I 上的面板内想要完成工作后,在 MainScreen 或面板上的同一面板上显示 MoviesInfo Form加载表单。我怎样才能做到这一点?
我像那样在面板上添加表格。
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());
}
}
主屏幕表单
private void MovieOnButtonClick(object sender, EventArgs eventArgs)
{
using (loading = new LoadingForm(getMovieData))
{
loading.ShowDialog(this);
}
AddFormToPanel(moviesInfo, panelMain);
}
我不要这一行loading.ShowDialog(this);我想在面板中添加加载表单。
将操作和控件移动到 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 放置在该面板中。
我有3个表格。名称:MainScreen、LoadingForm、MoviesInfo。 当我按下 MainScreen 上的按钮时,它正在做一些工作并且 LoadingForm 正在加载到 MainScreen.I 上的面板内想要完成工作后,在 MainScreen 或面板上的同一面板上显示 MoviesInfo Form加载表单。我怎样才能做到这一点? 我像那样在面板上添加表格。
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());
}
}
主屏幕表单
private void MovieOnButtonClick(object sender, EventArgs eventArgs)
{
using (loading = new LoadingForm(getMovieData))
{
loading.ShowDialog(this);
}
AddFormToPanel(moviesInfo, panelMain);
}
我不要这一行loading.ShowDialog(this);我想在面板中添加加载表单。
将操作和控件移动到 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 放置在该面板中。