Ich habe eine Anwendung, die mehrere Steuerelemente auf mehreren Seiten hat. Ich verwende die Telerik Winforms-Steuerelemente. Eine dieser Seiten hat eine RadGridView
in einer UserControl
, die über eine RadPageViewPage
in einer RadPageView
ist, die wiederum in einer anderen RadPageViewPage
in einer anderen RadPageView
verschachtelt ist. Der folgende Code dient im Grunde nur dazu, einen Loading-Spinner zu handhaben, der in seiner eigenen transparenten Form untergebracht ist. Es wird natürlich immer auf einem eigenen Thread aufgerufen.C# Winforms Problem Zentrierung ein Formular über ein Steuerelement, kann es über andere Steuerelemente
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);
}
Klar, ich will die Spinner (WaitForm
) on-demand über das Zentrum einer Kontrolle erscheinen. Es ist in Ordnung, wenn ich es die Haupt UserControl
überbringe, die die RadGridView
beherbergt, und ich kann es auch das Elternteil dieser Kontrolle übergeben und auf der RadPageViewPage
zentrieren. Wenn ich diese Methode die RadGridView
übergebe, wird das Drehfeld überhaupt nicht angezeigt, obwohl der Code aufgerufen wird und die Attribute von "wf
" noch festgelegt werden. Kann mir jemand sagen, was ich vermisse?
Ich bin mir nicht sicher, warum Sie ein Formular in einem anderen Thread anzeigen möchten, aber Sie können es [auf diese Weise] (http://stackoverflow.com/a/41263382/3110834) tun. –
Das wird nicht funktionieren. Die Drehfeldform muss in einem separaten Thread sein, da es ausgeführt werden muss, während eine langfristige Operation auf dem Hauptthread ausgeführt wird. Ich rufe diese Methode bereits von einem anderen Thread, aber es sollte über das Steuerelement zentriert werden, das Daten lädt. Dort habe ich Probleme. – CDove
Im Allgemeinen müssen Sie ein Formular in einem anderen Thread nicht öffnen, die zeitaufwendige Aufgabe sollte in einem anderen Thread sein, aber nicht in Ihrem wartenden Formular. Wie auch immer, wenn Sie das Formular von einem anderen Thread öffnen möchten, ist der Link, den ich geteilt habe, die Art, ein Formular von einem anderen Thread zu öffnen, und sicherlich funktioniert es. –