Tôi đã hỏi câu hỏi này trước đây và nghĩ rằng tôi đã tìm ra nhưng nó vẫn không hoạt động. Form.Show() moves form position slightlyForm.Location không hoạt động
Vì vậy, tôi có biểu mẫu cha mở một nhóm trẻ có chương trình() và sau đó khi cần thiết, tôi sử dụng hàm bringToFront() để hiển thị nó. Vấn đề là khi show() được gọi là hình thức con được liên kết hoàn hảo nhưng khi tôi sử dụng bringToFront nó di chuyển trái và xuống 1 px mà vít với biên giới của tôi. Tôi đã đặt tất cả các biểu mẫu con startPosition properties thành Manual trước khi show() - ing chúng. Tôi đã đặt frm.location = new Point (x, y) khi đưa lên trước. Tôi cũng đã cố gắng giải thích thiết lập frm.location khi show() - ing cũng có. Nó vẫn di chuyển nó sang trái và xuống 1 px khi tôi mangToFront(). Có cái gì đó với bringToFront() không cho phép tôi thay đổi thuộc tính vị trí của biểu mẫu? Đây là mã của tôi:
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 như vậy rõ ràng là Microsoft có một lỗi cho phép StartPosition chỉ làm việc cho ShowDialog() và không Hiện() nhưng từ chối để sửa chữa nó: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=107589
Nhưng nhu cầu ứng dụng của tôi để giữ cho tất cả các biểu mẫu khác nhau mở ra và chỉ đưa chúng lên phía trước khi cần thiết ... vì vậy ShowDialog() có thể không được sử dụng một cách thích hợp trong trường hợp này đúng không? Vậy tôi có những lựa chọn nào? Bất kì?
Hmmm ... Nếu tôi xóa FormWindowState.Maximized điều này thực hiện chính xác những gì tôi muốn, tuy nhiên MdiParent cho phép người dùng cuộn và xem toàn bộ trẻ em và trẻ em đằng sau nó và tôi không muốn .... – novacara