RightToleft, Showintaskbar Properties, form.showdialog ()를 예기치 않게 변경하는 경우 예기치 않게

StackOverflow https://stackoverflow.com/questions/152069

  •  02-07-2019
  •  | 
  •  

문제

닫기 버튼을 누른 것처럼 취소 결과와 예외없이 대화 상자가 닫힙니다.
RightToleft 속성을 설정하기위한 유일한 안전한 장소는 양식 생성자입니다.

이 정보가 다른 사람의 시간을 절약 할 수있는 것은 나에게 일어났다.
이 문제에 대해 자세히 설명 할 수 있다면 : 공식 버그 확인이 있다면 ShowDialog가 예기치 않게 끝날 수있는 다른 이유는 무엇입니까?

Re : 트레이에 가까운 -MSDN 포럼

런타임시 RightToleft 속성을 변경하십시오


두 번째 링크에서 인용 :

이틀 이내에 두 번째 버그를 발견했습니다. 이 새로운 버그는 매우 중요합니다.

RightToleft 속성이 기본값으로 설정된 일반 양식이 있습니다 (RightToleft = false). 이 양식을 쇼 기능으로 보여 드리겠습니다 (form1.show (me))

이 형식에는 No 대신 RightToleft 양식을 yes로 변경하는 버튼이 있습니다.

개인 하위 버튼 1_click (byval sender as system.object, byval e as system.eventArgs) 처리 button1.click
Me.rightToleft = Windows.Forms.rightToleft.yes
종료 서브

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

이것에 이르면 문제가 없습니다.

문제가 다음과 같이 발생합니다

Show (ME)를 사용하여 표시하는 대신 ShowDialog (ME) 함수를 사용 하여이 양식을 사용자에게 표시하는 경우. 그런 다음 양식 RightToleft가 아니오 대신 YES로 변경되는 버튼을 클릭하면 이유없이 갑자기 닫히고 예외를 던지지 않습니다.
이것은 새로운 문제이며 .NET 3.0 (Orcase)에도 존재합니다.

도움이 되었습니까?

해결책

좋아 ... 당신을위한 빠른 수정이 있습니다. 그것은이다 끔찍한, 이것은 마구 자르기 그러나 그것은 공장.

내 대답에서 원래 질문:

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;
    }
}

shneaky 부분은 그것을 부착합니다 결산 이벤트를 형성하십시오 방금 왼쪽 스왑 (_righttoleft)을 수행 한 경우 닫히지 말라고 말하십시오. 가까이 있지 않다고 말한 후에는 왼쪽 깃발을 오른쪽으로 제거하고 인생이 계속되도록하십시오.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top