是否可以在文本和边框之间的Rich Text Box控件中添加填充?
我尝试将一个富文本框对接到一个面板内,其四边的填充设置为10,并完成了我想要的.除非需要填充富文本框的垂直滚动条,否则也会填充.
Lar*_*rry 27
RichTextBox没有填充属性.
通过将RichTextBox放在Panel中可以实现快速和脏的填充,该Panel具有与BackColor
RichTextBox 相同的属性(通常Color.White
).
然后,将Dock
RichTextBox 的属性设置为Fill
,并使用Padding
Panel控件的属性进行播放.
Uwe*_*eim 25
将这两者结合在一起,你可以做到这一点:
......看起来像这样:
我写了一个小的C#扩展类来包装这一切.
用法示例:
const int dist = 24;
richTextBox1.SetInnerMargins(dist, dist, dist, 0);
Run Code Online (Sandbox Code Playgroud)
这将左边,上边和右边的内边距设置为24,底部为零.
请注意,滚动时,上边距保持不变,如下所示:
就个人而言,这对我来说看起来"不自然".我倾向于在滚动上边距时也变为零.
也许有一个解决方法......
截至要求:
public static class RichTextBoxExtensions
{
public static void SetInnerMargins(this TextBoxBase textBox, int left, int top, int right, int bottom)
{
var rect = textBox.GetFormattingRect();
var newRect = new Rectangle(left, top, rect.Width - left - right, rect.Height - top - bottom);
textBox.SetFormattingRect(newRect);
}
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public readonly int Left;
public readonly int Top;
public readonly int Right;
public readonly int Bottom;
private RECT(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
public RECT(Rectangle r) : this(r.Left, r.Top, r.Right, r.Bottom)
{
}
}
[DllImport(@"User32.dll", EntryPoint = @"SendMessage", CharSet = CharSet.Auto)]
private static extern int SendMessageRefRect(IntPtr hWnd, uint msg, int wParam, ref RECT rect);
[DllImport(@"user32.dll", EntryPoint = @"SendMessage", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, ref Rectangle lParam);
private const int EmGetrect = 0xB2;
private const int EmSetrect = 0xB3;
private static void SetFormattingRect(this TextBoxBase textbox, Rectangle rect)
{
var rc = new RECT(rect);
SendMessageRefRect(textbox.Handle, EmSetrect, 0, ref rc);
}
private static Rectangle GetFormattingRect(this TextBoxBase textbox)
{
var rect = new Rectangle();
SendMessage(textbox.Handle, EmGetrect, (IntPtr) 0, ref rect);
return rect;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
我有同样的问题,所描述的答案对我没有帮助,这对我有用,所以如果有帮助我会分享它.
richTextBox1.SelectAll();
richTextBox1.SelectionIndent += 15;//play with this values to match yours
richTextBox1.SelectionRightIndent += 15;//this too
richTextBox1.SelectionLength = 0;
//this is a little hack because without this
//i've got the first line of my richTB selected anyway.
richTextBox1.SelectionBackColor = richTextBox1.BackColor;
Run Code Online (Sandbox Code Playgroud)
一种快速简便的方法是通过在表单加载和表单/控件调整大小事件中调用此示例方法来从垂直滚动中偏移文本:
private void AdjustTextBoxRMargin()
{
richTextBox1.RightMargin = richTextBox1.Size.Width - 35;
}
Run Code Online (Sandbox Code Playgroud)
35的值似乎适用于Win7,但在其他版本的Windows上可能有所不同.