複数のコントロールを持つアプリケーションがあります。私はTelerik Winformsコントロールを使用しています。これらのページの1つはUserControl
のRadGridView
を有し、これはRadPageView
のRadPageViewPage
にあり、次にもう1つのRadPageViewPage
を別のRadPageView
に入れ子に入れている。次のコードは、基本的には、独自の透明なフォームに格納されているLoadingスピナーを処理することです。もちろん、それは常に自分のスレッドで呼び出されます。C#Winformsはコントロールの上にフォームを配置し、他のコントロールの上に中央に配置することができます
private static void RunWaiting(Control c, string text)
{
wf = new WaitingForm();
wf.drwbieSpinnerFrame.Text = text;
wf.ShowInTaskbar = false;
wf.Left = c.Left + (c.Width/2);
wf.Top = c.Top + (c.Height/2);
wf.Width = c.Width;
wf.Height = c.Height;
wf.FormBorderStyle = FormBorderStyle.None;
wf.ControlBox = false;
wf.TopMost = true;
wf.StartPosition = FormStartPosition.Manual;
Application.Run(wf);
}
は明らかに、私はスピナー(WaitForm
)は、オンデマンド制御の中心上に表示します。 RadGridView
が入っているメインのUserControl
を渡すといいですし、そのコントロールの親をRadPageViewPage
に渡すこともできます。このメソッドをRadGridView
に渡すと、コードが呼び出され、 "wf
"の属性が設定されているにもかかわらず、スピンがまったく表示されません。私が何が欠けているか教えてもらえますか?
なぜ私は別のスレッドでフォームを表示したいのか分かりませんが、[この方法で]行うことができます(http://stackoverflow.com/a/41263382/3110834)。 –
実際には動作しません。スピナーフォームは、メインスレッド上で長期的な操作が行われている間に実行する必要があるため、別のスレッドになければなりません。私はすでに別のスレッドからこのメソッドを呼び出していますが、データをロードしているコントロールの中央に配置する必要があります。それが私が困っているところです。 – CDove
一般に、別のスレッドでフォームを開く必要はありません。時間のかかるタスクは別のスレッドで実行する必要があります。とにかく、別のスレッドからフォームを開く場合、私が共有するリンクは別のスレッドからフォームを開く方法であり、確かに動作します。 –