【发布时间】:2013-01-18 15:45:02
【问题描述】:
我正在用 C# 开发一个 Windows 窗体应用程序,它在窗体上有一个多行 TextBox 控件。
由于特定的(不相关的)原因,此 TextBox 需要在 TextBox 控件的 左侧 侧有一个垂直滚动条。我当然已经在寻找解决方案,但我找不到任何...所以我的问题是:
1) 有没有办法让 TextBox 控件(或派生自 TextBox 或 TextBoxBase 的用户控件)的自动垂直滚动条出现在左侧而不是右侧?这是首选方法,因为所有 scolling 仍然由控件处理。由于为这样的 TextBox 设置 RightToLeft 属性实际上会将滚动条向左移动,所以我觉得这里一定有一个黑客可以利用。
或
2) 当 TextBox 滚动时,我是否可以通过 IMessageFilter 实现拦截一条消息,即使它没有滚动条? IE。用户可以使用箭头键滚动,文本框将上下移动行,但我找不到任何在发生这种情况时触发的消息。
也许关于如何做到这一点的另一个想法?
编辑添加:文字需要水平对齐右!否则我早就解决了。
2014 年 11 月 3 日的新编辑:好的,在 BenVlodgi 发表评论后,我开始怀疑自己的理智。所以我创建了一个测试项目,现在我记得为什么将RightToLeft 设置为Yes 不起作用。
下图在左侧显示了具有该设置的常规文本框。滚动条在左侧,文本在右侧,但文本显示不正确。句末句号移到句前。
第二个 TextBox 控件是 LarsTech 的回答中建议的,它可以正常工作并且不会移动任何标点符号。
因此,我接受并奖励 LarsTech 的回答。
【问题讨论】:
-
根据记忆,如果您将
LeftToRight设置为是,并将TextAlign=HorizontalAlign.Right设置为文本,会发生什么? -
是的,我试过了,但是文本从右到左(向后)流动,这不是我想要的。
-
谢谢瑞秋,我会仔细看看。看来我可以修改该代码以使用文本框。
-
@JohnWillemse 你说
The text needs to be aligned to the right horizontally这是任何改变一个错字。将 RightToLeft 属性设置为RightToLeft.Yes,实际上完成了这两项任务。也许你的意思是说你希望文本水平对齐到左边。