【问题标题】:displaying issue when switching between RTL and LTR in Win Form Rich Text Box在 Win Form 富文本框中切换 RTL 和 LTR 时显示问题
【发布时间】:2014-11-14 15:47:43
【问题描述】:

我在 Win 表单和 WPF 表单中都尝试过同样的事情,似乎这只发生在 Win Form 中。 基本上发生的事情是我在 Win Form 中有一个 RTB 控件,以及 2 个按钮:RTL 和 LTR 来调整对齐方式。

按钮 1 被点击:

richTextBox1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;

按钮 2 被点击:

richTextBox1.RightToLeft = System.Windows.Forms.RightToLeft.No;

这就是我的全部。当我将文本粘贴到 RTB 中并单击 RTL 按钮时,它在 RTB 中留下了很大的空白。我注意到只有在滚动条出现时才会发生这种情况。如果你调整表格的大小,差距就会消失。

查看截图链接: screenshot of the issue

我尽我所能,但不知道为什么会这样。我怀疑这是一个 .NET 错误,有人知道吗?

【问题讨论】:

  • 只是一个想法:您是否在设置 .RightToLeft 属性后尝试刷新 rtb?设置后在 RTB 上执行 .Refresh() 看看是否有帮助。
  • 感谢您的回复。是的,我确实尝试过 Refresh(),但没有帮助。
  • 大差距究竟出现在哪里?可以贴一下截图吗?
  • 好的,只需在粘贴内容后使用 RTB.ScrollToCaret()。它固定在我的应用程序上。
  • 谢谢,我尝试了以下方法:但它仍然无法正常工作,在您的情况下 RTB 是richTextBox 实例吗? private void RTL_Click(object sender, EventArgs e) { richTextBox1.RightToLeft = System.Windows.Forms.RightToLeft.Yes; richTextBox1.ScrollToCaret(); }

标签: c# winforms richtextbox right-to-left


【解决方案1】:

我可以开始工作的唯一解决方案是在更改 RTB 控件的 RightToLeft 属性并添加 Application.Doevents() 时重置文本。

像这样:

private void buttonRTL_Click(object sender, EventArgs e)
{

    string txtRTF = RichTextBox1.Rtf;
    RichTextBox1.Clear();
    RichTextBox1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
    Application.DoEvents();
    RichTextBox1.Rtf = txtRTF;

}

【讨论】:

  • 谢谢,这似乎解决了这个问题。我认为这是一种解决方法,因为我仍然不明白为什么我们必须这样做。我仍然认为这是一个 .NET 错误
  • 代替DoEvents,你可以试试:this.BeginInvoke(new Action(() => { richTextBox1.Rtf = txtRTF; }));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2016-04-10
相关资源
最近更新 更多