对话框以取消结果关闭,没有异常,就像你按下了关闭按钮一样 设置RightToLeft属性的唯一安全位置是表单构造函数。

我发现这些信息可能会节省别人的时间。
如果你能够详细说明问题:如果有正式的错误确认,那么还有什么可能导致ShowDialog意外结束,请做。

Re:靠近托盘 - MSDN论坛

在运行时更改Form RightToLeft属性


从第二个链接引用:

  

我在不到两天的时间内发现了第二个错误。这个新bug非常关键。

     

我将Normal Form与RightToLeft属性设置为其默认值(RightToLeft = False)。   让我们用Show Function(Form1.Show(me))

来显示这个表单      

在此表单中有一个Button,它将Form RightToLeft更改为Yes而不是No:

     

Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)处理Button1.Click
   Me.RightToLeft = Windows.Forms.RightToLeft.Yes
  结束子

     

表格会将其标题成功更改为右侧。

     

Up To This这没有问题。

     

问题发布如下

     

如果我们使用ShowDialog(Me)函数向用户显示此表单,而不是使用Show(Me)显示它。然后点击按钮,它将把Form RightToLeft改为Yes而不是No,Form将无理由地突然关闭,甚至不会抛出任何异常。
       这是新问题&它也存在于.NET 3.0(Orcase)中。

有帮助吗?

解决方案

好的......我有一个快速解决方案。它是讨厌,它是 hack ,但它有点有效。

从我对的回答原始问题

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

它附加到形式关闭事件的那个偷偷摸摸的部分,然后告诉它如果你刚刚进行了从右到左的交换(_rightToLeft)则不关闭。告诉它不要关闭你删除从右到左的旗帜,让生命继续下去。

* bug:关闭使用.Show(this)打开的表单时会出现错误,但我相信你可以修复它!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top