2008-09-30 2 views
1

닫는 단추를 눌렀을 때와 마찬가지로 대화 상자에서 결과가 취소되고 예외는 없습니다.
RightToLeft 속성을 설정하는 유일한 안전한 장소는 양식 생성자입니다.RightToLeft, ShowInTaskbar 속성을 변경하면 Form.ShowDialog()가 예기치 않게 종료됩니다.

이 정보는 다른 사람의 시간을 절약 할 수 있습니다.
문제를 자세히 설명 할 수있는 경우 : 공식적인 버그 확인이있는 경우 ShowDialog가 예기치 않게 종료 될 수있는 다른 원인이 될 수 있습니다. 나는 미만 이틀 만에 두 번째 버그를 발견 한

:

두 번째 링크에서 change Form RightToLeft property at runtime


견적

Re: close to tray - MSDN Forums

. 이 새로운 버그는 매우 중요합니다.

RightToLeft 속성이 기본 값 (RightToLeft = False)으로 설정된 표준 양식이 있습니다. 우리가 예 대신 없음의에 양식 RightToLeft로를 변경 버튼이이 양식에서

() (저를 Form1.Show를) 표시 기능이 양식을 보여주지 :

시스템으로

개인 서브를 Button1_Click (ByVal의 보낸 사람 .Object는 경우 System.EventArgs으로 ByVal의 e)이 Button1.Click를 처리
Me.RightToLeft = Windows.Forms.RightToLeft.Yes
최종 하위

양식이 오른쪽으로 성공적으로 제목을 변경합니다.

까지이 문제는 없습니다.

문제 발생 시킬수으로 우리가 쇼 (나)를 사용하여 디스플레이 대신 ShowDialog를 (나) 기능을 사용하여 사용자에게이 양식을 표시하는 경우

를 다음과 같습니다. 그런 다음 Form RightToLeft를 No 대신 Yes로 변경하는 버튼을 클릭하면 폼이 아무 이유없이 갑자기 닫히고 예외가 발생하지 않습니다.
이것은 새로운 문제 &입니다. .NET 3.0 (Orcase) 너무 많이 존재합니다.

+0

마지막으로 설정 한 코드로 테스트했습니다. 그리고 너 한테 포인트가있는 것 같아. 조금도! 그건 아주 심술 궂네! – FryHard

답변

1

좋아 ... 나는 당신을 위해 빠른 수정을했습니다. 지저분한이고, 해킹이지만 일종 작품입니다. original question에 대한 내 대답에서

:

private bool _rightToLeft; 
private void SetRTL(bool setRTL) 
{ 
    _rightToLeft = true; 
    ApplyRTL(setRTL, this); 
} 

private void ApplyRTL(bool yes, Control startControl) 
{ 
    if ((startControl is Panel) || (startControl is GroupBox)) 
    { 
     foreach (Control control in startControl.Controls) 
     { 
      control.Location = CalculateRTL(control.Location, startControl.Size, control.Size); 
     } 
    } 
    foreach (Control control in startControl.Controls) 
     ApplyRTL(yes, control); 
} 

private Point CalculateRTL(Point currentPoint, Size parentSize, Size currentSize) 
{ 
    return new Point(parentSize.Width - currentSize.Width - currentPoint.X, currentPoint.Y); 
} 

private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (_rightToLeft) 
    { 
     _rightToLeft = false; 
     e.Cancel = true; 
    } 
} 

폼 closing 이벤트에 연결 한 다음 말할 수있는 shneaky 부분에 그냥 남아 스왑에 대한 권리를 수행 한 경우 닫지 (_rightToLeft). 가까이 가지 말라고 말하면서 왼쪽 깃발을 벗고 인생을 계속하도록하십시오.

버그 : .Show (this)로 양식을 닫을 때 발생하는 버그가 있지만 해결할 수 있다고 확신합니다!

+0

Show()에서 조금이라도 변경하면 작동 할 수도 있습니다. private void SetRTL (bool setRTL) {_rightToLeft = true; ApplyRTL (setRTL, this); _rightToLeft = false; } – eugensk00

관련 문제