Zadałem to pytanie wcześniej i myślałem, że mam to ustalone, ale nadal nie działa. Form.Show() moves form position slightlyForm.Location nie działa
Tak więc mam formularz nadrzędny, który otwiera grupę dzieci z show(), a następnie, gdy jeden jest potrzebny Używam bringToFront(), aby wyświetlić. Problem polega na tym, że wywołanie funkcji show() sprawia, że forma potomna jest idealnie wyrównana, ale kiedy używam metody bringToFront, przesuwa się ona w lewo i dół o 1 piksel, która wkręca się przy moich obramowaniach. Ustawiłem właściwości właściwości startPosition dla wszystkich dzieci na Manual przed show() -. Ustawiłem frm.location = new Point (x, y) przy przenoszeniu do przodu. Próbowałem również explicity ustawienie frm.location, gdy show() - również. Wciąż przesuwa ją w lewo i w dół o 1 piksela, gdy wprowadzam metodę bringToFront(). Czy jest coś z bringToFront(), które nie pozwala mi zmienić właściwości położenia formularza? Tu jest mój kodu:
if (myNewForm != null)
{
myNewForm.MdiParent = this;
bool isFormOpen = false;
foreach (Form frm in Application.OpenForms)
{
if (frm.GetType() == myNewForm.GetType())
{
frm.WindowState = FormWindowState.Maximized;
frm.BringToFront();
frm.Location = new Point(-4, -30);
isFormOpen = true;
break;
}
}
if (!isFormOpen)
{
myNewForm.StartPosition = FormStartPosition.Manual;
myNewForm.Show();
}
}
EDIT: Ok, więc najwyraźniej Microsoft ma błąd, który umożliwia startPosition pracować tylko dla ShowDialog(), a nie show(), ale odmawia go naprawić: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=107589
ale moje potrzeby aplikacji aby zachować wszystkie otwarte formy i po prostu przynieść je na pierwszy plan w razie potrzeby ... więc funkcja ShowDialog() nie mogła być odpowiednio użyta w tym przypadku, prawda? Jakie więc opcje mam? Każdy?
Hmmm ... Jeśli usunąć FormWindowState.Maximized to robi dokładnie to, co chcę go jednak wówczas MdiParent pozwala użytkownikowi na przewijanie i zobaczyć pełną dziecka i dzieci za nim i nie chcę, że albo .... – novacara