C# 如何设置 richTextBoxr的边距

 

附件 http://files.cnblogs.com/xe2011/richTextBox_EM_SETRECT.rar

 

using System.Runtime.InteropServices; 

 public struct Rect
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }

        [DllImport("user32.dll")]
        private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, ref Rect lParam);//

        private const int EM_GETRECT = 0x00b2;
        private const int EM_SETRECT = 0x00b3;

        public Rect RichTextBoxMargin
        {
            get
            {
                Rect rect = new Rect();
                SendMessage(richTextBox1.Handle, EM_GETRECT, IntPtr.Zero, ref rect);
                rect.Left += 1;
                rect.Top += 1;
                rect.Right = 1 + richTextBox1.ClientSize.Width - rect.Right;
                rect.Bottom = richTextBox1.ClientSize.Height - rect.Bottom;
                return rect;
            }
            set
            {
                Rect rect;
                rect.Left =  richTextBox1.ClientRectangle.Left + value.Left;
                rect.Top =   richTextBox1.ClientRectangle.Top + value.Top;
                rect.Right =  richTextBox1.ClientRectangle.Right - value.Right;
                rect.Bottom =  richTextBox1.ClientRectangle.Bottom - value.Bottom;

                SendMessage(richTextBox1.Handle, EM_SETRECT, IntPtr.Zero, ref rect);
            }

        }

        //设置
        private void button1_Click(object sender, EventArgs e)
        {
            Rect rect;
            rect.Left = 50;
            rect.Top = 50;
            rect.Right = 50;
            rect.Bottom = 50;

            RichTextBoxMargin = rect;
        }

        //获得
        private void button2_Click(object sender, EventArgs e)
        {
            Rect rect;
            rect = RichTextBoxMargin;

            MessageBox.Show( string.Format("Left = {0} top={1} right={2} bottom={3}",rect.Left,rect.Top,rect.Right,rect.Bottom));
        }

 

 放在自定义的类里面

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Runtime.InteropServices;
  6 
  7 namespace System.Windows.Forms
  8 {
  9     public class CustomRichTextBox:RichTextBox
 10     {
 11         public CustomRichTextBox()
 12         {
 13             richTextBox1=this;
 14         }
 15         private System.Windows.Forms.RichTextBox richTextBox1;
 16 
 17         private struct Rect
 18         {
 19             public int Left;
 20             public int Top;
 21             public int Right;
 22             public int Bottom;
 23         }
 24 
 25         [DllImport("user32.dll")]
 26         private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, ref Rect lParam);
 27 
 28         private const int EM_GETRECT = 0x00b2;
 29         private const int EM_SETRECT = 0x00b3;
 30 
 31         /// <summary>
 32         /// 当没设置的时候结果多出了L T R +2
 33         /// </summary>
 34         private Rect RichTextBoxMargin
 35         {
 36             get
 37             {
 38                 Rect rect = new Rect();
 39                 SendMessage(richTextBox1.Handle, EM_GETRECT, IntPtr.Zero, ref rect);
 40                 rect.Left += 1;
 41                 rect.Top += 1;
 42                 rect.Right = 1 + richTextBox1.DisplayRectangle.Width - rect.Right;
 43                 rect.Bottom = richTextBox1.DisplayRectangle.Height - rect.Bottom;
 44                 return rect;
 45             }
 46             set
 47             {
 48                 Rect rect;
 49                 rect.Left = richTextBox1.ClientRectangle.Left + value.Left;
 50                 rect.Top = richTextBox1.ClientRectangle.Top + value.Top;
 51                 rect.Right = richTextBox1.ClientRectangle.Right - value.Right;
 52                 rect.Bottom = richTextBox1.ClientRectangle.Bottom - value.Bottom;
 53 
 54                 SendMessage(richTextBox1.Handle, EM_SETRECT, IntPtr.Zero, ref rect);
 55             }
 56 
 57         }
 58 
 59 
 60         public int LeftMargin
 61         {
 62             get
 63             {
 64                 return RichTextBoxMargin.Left;
 65             }
 66             set
 67             {
 68                 Rect rect1;
 69                 rect1 = RichTextBoxMargin;
 70 
 71                 Rect rect;
 72                 rect.Left = value;
 73                 rect.Top = rect1.Top;
 74                 rect.Right = rect1.Right;
 75                 rect.Bottom = rect1.Bottom;
 76 
 77                 RichTextBoxMargin = rect;
 78             }
 79         }
 80 
 81 
 82         public int RightMargin
 83         {
 84             get
 85             {
 86                 return RichTextBoxMargin.Right;
 87             }
 88             set
 89             {
 90                 Rect rect1;
 91                 rect1 = RichTextBoxMargin;
 92 
 93                 Rect rect;
 94                 rect.Left = rect1.Left;
 95                 rect.Top = rect1.Top;
 96                 rect.Right = value;
 97                 rect.Bottom = rect1.Bottom;
 98 
 99                 RichTextBoxMargin = rect;
100             }
101         }
102 
103 
104         public int TopMargin
105         {
106             get
107             {
108                 return RichTextBoxMargin.Top;
109             }
110             set
111             {
112                 Rect rect1;
113                 rect1 = RichTextBoxMargin;
114 
115                 Rect rect;
116                 rect.Left = rect1.Left;
117                 rect.Top = value;
118                 rect.Right = rect1.Right;
119                 rect.Bottom = rect1.Bottom;
120 
121                 RichTextBoxMargin = rect;
122             }
123         }
124 
125         public int BottomMargin
126         {
127             get
128             {
129                 return RichTextBoxMargin.Bottom;
130             }
131             set
132             {
133                 Rect rect1;
134                 rect1 = RichTextBoxMargin;
135 
136                 Rect rect;
137                 rect.Left = rect1.Left;
138                 rect.Top = rect1.Top;
139                 rect.Right = rect1.Right;
140                 rect.Bottom = value;
141                 RichTextBoxMargin = rect;
142             }
143         }
144 
145 
146     }
147 }
CustomRichTextBox.cs

使用

 1         private void button1_Click(object sender, EventArgs e)
 2         {
 3             customRichTextBox1.LeftMargin = 2;
 4             customRichTextBox1.TopMargin = 2;
 5             customRichTextBox1.RightMargin = 30;
 6             customRichTextBox1.BottomMargin = 30;
 7         }
 8 
 9         private void button2_Click(object sender, EventArgs e)
10         {
11             Text = string.Format("Left={0} Right={1} Top={2} Bottom={3}", 
12                 customRichTextBox1.LeftMargin, 
13                 customRichTextBox1.TopMargin,
14                 customRichTextBox1.RightMargin,
15                 customRichTextBox1.BottomMargin);
16         }
View Code

 

 

转载于:https://www.cnblogs.com/xe2011/p/3469614.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值