하나의 자식 폼에서 다른 자식 폼으로 전환 할 때 이상한 일이 발생합니다. 표시 할 폼이 최소화되고 복원 된 다음 최대화 된 것처럼 이상한 방식으로 나타납니다. 동시에 여러 드로잉 이벤트와 같은 효과를 일으 킵니다.C# MDI WinForms 자식 정품 인증
문제는 이러한 상황에서 (즉, 모든 작품) 나타나지 않습니다:
- 하나 CTRL + TAB 또는 CTRL + SHIFT + TAB를 사용하여 형태를 전환
- 하위 양식이 최대화되지 않고 양식의 순서/위치가 변경되는 경우
아마도 관련이 있습니다.
child.Focus()
child.Show()
child.Activate()
child.Select()
child.BringToFront()
내 질문 : 하나 포함 형태를 보여주는라고 할 수 방법의 톤 (및 관련)이 있습니다 정확히 내가 뭐라 부를까요?
편집 : 그것은 아무튼 .Select()
없이 :
private void tabForms_MouseClick(object sender, MouseEventArgs e)
{
// handle middle-mouse-button click (close)
if (e.Button == System.Windows.Forms.MouseButtons.Middle)
{
// See: http://stackoverflow.com/a/745361
TabPage tab = tabForms.TabPages.Cast<TabPage>().Where((t, i) => tabForms.GetTabRect(i).Contains(e.Location)).FirstOrDefault();
if (tab != null && tab.Tag != null) (tab.Tag as Form).Close();
}
// handle left-mouse-button click (show)
if ((tabForms.SelectedTab != null) && (tabForms.SelectedTab.Tag != null) && (ActiveMdiChild != tabForms.SelectedTab.Tag))
{
(tabForms.SelectedTab.Tag as Form).Select();
(tabForms.SelectedTab.Tag as Form).Show();
}
}
PS : 내 경우
, 나는 여전히 작동하지만 다음 코드는 내가 위에서 설명한 이상한 효과가 발생했다 일하지 마라. 비록 내가 .Select()
및 .Show()
을 .Focus()
으로 대체하면 여전히 작동하는 것으로 보입니다.
이것은 MDI 문제이므로 활성화 된 하나의 최대화 된 하위 창만 지원할 수 있습니다. 그림 크기가 작 으면 크기 조정 아티팩트가 추악합니다. 자녀가 항상 극대화되기를 원할 때 MDI를 사용하지 마십시오. 아무런 의미가 없습니다.대신 UserControls 또는 TopLevel 속성이 * false *로 설정된 폼을 교체하십시오. –
@HansPassant 나는 당신이 말하는 것을 이해하는지 모르겠다 ... 어린이 양식은 형식 ... 어떻게 mdi없이 그들을 포함시킬 수 있습니까? 또한, 당신이 UserControls 또는 TopLevel 도움이 될 의미가 무엇인지 이해하지 못했습니다. 감사. – Christian
당신은 내가 당신을 도울 수있는 많은 리드를주지 않습니다. 적어도 "Form.TopLevel"을 검색 상자에 넣고 가장 많이 투표 한 게시물을 봅니다. –