using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1.utils.ui { class TextBoxUtil { public const int WM_USER = 0x0400; public const int EM_GETPARAFORMAT = WM_USER + 61; public const int EM_SETPARAFORMAT = WM_USER + 71; public const long MAX_TAB_STOPS = 32; public const uint PFM_LINESPACING = 0x00000100; //定义结构体,为什么这么定义,我也不知道 [StructLayout(LayoutKind.Sequential)] private struct PARAFORMAT2 { public int cbSize; public uint dwMask; public short wNumbering; public short wReserved; public int dxStartIndent; public int dxRightIndent; public int dxOffset; public short wAlignment; public short cTabCount; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public int[] rgxTabs; public int dySpaceBefore; public int dySpaceAfter; public int dyLineSpacing; public short sStyle; public byte bLineSpacingRule; public byte bOutlineLevel; public short wShadingWeight; public short wShadingStyle; public short wNumberingStart; public short wNumberingStyle; public short wNumberingTab; public short wBorderSpace; public short wBorderWidth; public short wBorders; } //定义函数 [DllImport("user32", CharSet = CharSet.Auto)] private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, ref PARAFORMAT2 IParam); //调用方法如下 public static void SetLineSpace(RichTextBox richTextBox, int lineSpace) { PARAFORMAT2 pFormat = new PARAFORMAT2(); pFormat.cbSize = Marshal.SizeOf(pFormat); pFormat.bLineSpacingRule = 4; pFormat.dyLineSpacing = lineSpace; pFormat.dwMask = PFM_LINESPACING; SendMessage(new HandleRef(richTextBox, richTextBox.Handle), EM_SETPARAFORMAT, 4, ref pFormat); } } }