Wenn Sie RightToLeft, Eigenschaften ShowInTaskbar ändern, Form.ShowDialog () unerwartet beendet

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

  •  02-07-2019
  •  | 
  •  

Frage

Dialog schließt mit Abbrechen, keine Ausnahmen, als ob Sie die engen Taste gedrückt.
Der einzig sichere Ort RightToLeft Eigenschaft zu setzen, ist in Form Konstruktor.

Es fiel mir ein, dass diese Informationen von jemand anderem Zeit sparen könnte.
Wenn Sie in der Lage sind zu diesem Thema zu erarbeiten:., Wenn es eine offizielle Bestätigung Fehler ist, was sonst könnte Showdialog verursachen unerwartet zu beenden, bitte, tut

Re: close to tray - MSDN Foren

Formular ändern RightToLeft Eigenschaft zur Laufzeit


Zitat aus dem zweiten Link:

  

Ich habe einen zweiten Fehler in weniger als zwei Tagen gefunden. Dieser neue Fehler ist sehr kritisch.

     

Ich habe Normalform mit RightToLeft Eigenschaft auf den Standardwert (RightToLeft = False) gesetzt.   Lassen Sie uns diese Form mit Show-Funktion zeigen (Form1.Show (me))

     

In diesem Formular gibt es einen Knopf, die auf Formular RightToLeft ändern Ja statt Nein:

     

Private Sub Button1_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Griffe Button1.Click
   Me.RightToLeft = Windows.Forms.RightToLeft.Yes
  End Sub

     

Das Formular wird seinen Titel erfolgreich auf die rechte Seite wechseln.

     

Bis zu dieser gibt es kein Problem.

     

Problem OCCURE wie folgt

     

Wenn wir dieses Formulars Anzeige für den Benutzer mit Showdialog (Me) Funktion anstelle von Display anzeigen es mit (Me). Dann Schaltfläche klicken, die anstelle von No-Formular RightToLeft auf Ja ändern, wird Formular ohne Gründe Schließen Plötzlich und auch keine Ausnahmen werfen.
       Dies ist das neue Problem & es existiert auch in .NET 3.0 (Orcase) Too.

War es hilfreich?

Lösung

Ok ... Ich habe eine schnelle Lösung für Sie. Es ist böse , es ist ein Hack , aber es irgendwie funktioniert.

Aus meiner Antwort auf die ursprüngliche Frage :

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

Der shneaky Teil an die Form Abschlussveranstaltung befestigen und dann sagen, nicht in der Nähe, wenn Sie gerade ein von rechts nach links swap (_rightToLeft) durchgeführt. Nachdem gesagt, dass es nicht in der Nähe des von rechts nach links Fahne Sie entfernen und Leben lassen weiter auf.

* Fehler: gibt es einen Fehler, der beim Auftreten eines Formulars offen mit .Show (diese) zu schließen, aber ich bin sicher, Sie können das beheben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top