c# RichTextBox 垂直居中 边距设置

来源:互联网 发布:linux telnet包下载 编辑:程序博客网 时间:2024/04/30 19:10

附件 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 TopMargin105         {106             get107             {108                 return RichTextBoxMargin.Top;109             }110             set111             {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 BottomMargin126         {127             get128             {129                 return RichTextBoxMargin.Bottom;130             }131             set132             {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 }
复制代码

使用

复制代码
 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         }
复制代码

 

0 1
原创粉丝点击