
我终于得到这个工作:
字符串tempTxt = richTextBox.Text;
richTextBox.Clear();
richTextBox.Text = tempTxt;
但需要有一个更好的方法,对吧?
编辑2:
需要明确的是richtextbox rtf,我要删去所有格式,同时保留文本。它看起来像在第一编辑将船coderichtextbox rtf,除非其他人有更高效的/更好的编码模式。
编辑3:
richTextBox.Text = richTextBox.Text.ToString();
似乎并没有工作,因为它依然没有清除所有格式。上面我不讨厌在第一次编辑方法的理由是它使文本框“闪”时,将其去掉,然后再输入文字。这似乎需要仅仅是一个richTextBox.ResetFormatting()方法,或者某些形式来访问同样的功能,如Clear()方法知道地(没有双关语意)确实某些除了格式化复位到只需清除所有文本
要总结一下:
有没有一种方法(如果有的话,它是哪个)可以再次修改一个RichTextBox文本的格式不去掉文本在里面的事例中(因为造成不良闪烁)?
解决方案
Saddly我终于做了我最好的尽力,这个纤细下降到唯有所需的code。它依然是很高的,但它会奏效。 .NET中的RichTextBox的API是比较有限的,做任何事情,你几乎要咚到Win32的库。我围绕这个东西整个库,这样我可以切换大胆决定能否大胆实际上是整个选择集。
用法:
RichTextBox的TE = ...;
te.ClearAllFormatting(新字体(“Microsoft无衬线”,8.25f));
code吨
静态类RichTextExtensions
{
公共静态无效ClearAllFormatting(这RichTextBox的德,字体字型)
{
CHARFORMAT2 FMT =新CHARFORMAT2();fmt.cbSize = Marshal.SizeOf(FMT);
fmt.dwMask = CFM_ALL2;
fmt.dwEffects = CFE_AUTOCOLOR | CFE_AUTOBACKCOLOR;
fmt.szFaceName = font.FontFamily.Name;双大小= font.Size;
大小/ = 72; //逻辑dpi(每英寸像素)
大小* = 1440.0;每英寸//缇fmt.yHeight =(int)的大小; // 165
fmt.yOffset = 0;
fmt.crTextColor = 0;
fmt.bCharSet = 1; // DEFAULT_CHARSET;
fmt.bPitchAndFamily = 0; // DEFAULT_PITCH;
fmt.wWeight = 400; // FW_NORMAL;
fmt.sSpacing = 0;
fmt.crBackColor = 0;
//fmt.lcid =?
fmt.dwMask&安培; =〜CFM_LCID; //不知道如何得到这个...
fmt.dwReserved = 0;
fmt.sStyle = 0;
fmt.wKerning = 0;
fmt.bUnderlineType = 0;
fmt.bAnimation = 0;
fmt.bRevAuthor = 0;
fmt.bReserved1 = 0;SendMessage函数(te.Handle,EM_SETCHARFORMAT,SCF_ALL,楼盘FMT);
}私人常量UInt32的WM_USER = 0x0400的时候;
私人常量UInt32的EM_GETCHARFORMAT =(WM_USER + 58);
私人常量UInt32的EM_SETCHARFORMAT =(WM_USER + 68);
私人常量UInt32的SCF_ALL = 0x0004单元;
私人常量UInt32的SCF_SELECTION = 0×0001;函数[DllImport(“user32.dll中”,字符集= CharSet.Auto,SetLastError = FALSE)]
静态外部的IntPtr SendMessage函数(IntPtr的的HWND,UInt32的消息,UInt32的wParam中,裁判CHARFORMAT2 lParam的);[StructLayout(LayoutKind.Sequential,包= 4,字符集= CharSet.Auto)
结构CHARFORMAT2
{
公众诠释CBSIZE;
公共UINT dwMask;
公共UINT dwEffects;
公众诠释yHeight;
公众诠释yOffset;
公众诠释crTextColor;
公共字节bCharSet;
公共字节bPitchAndFamily;
[的MarshalAs(UnmanagedType.ByValTStr,SizeConst = 32)]
公共字符串szFaceName;
公共短wWeight;
公共短sSpacing;
公众诠释crBackColor;
公众诠释LCID;
公众诠释dwReserved;
公共短sStyle;
公共短wKerning;
公共字节bUnderlineType;
公共字节bAnimation;
公共字节bRevAuthor;
公共字节bReserved1;
}#区域CFE_
// CHARFORMAT效果
常量UInt32的CFE_BOLD = 0×0001;
常量UInt32的CFE_ITALIC = 0×0002;
常量UInt32的CFE_UNDERLINE = 0x0004单元;
常量UInt32的CFE_STRIKEOUT = 0×0008;
常量UInt32的CFE_PROTECTED = 0×0010;
常量UInt32的CFE_LINK = 0×0020;
常量UInt32的CFE_AUTOCOLOR = 0x40000000之后; //注意:这相当于
// CFM_COLOR,控制它
//和CHARFORMAT2定义的效果 - 一个(*)表示
//该数据通过的RichEdit 2.0 / 3.0储存,但不显示
常量UInt32的CFE_SMALLCAPS = CFM_SMALLCAPS;
常量UInt32的CFE_ALLCAPS = CFM_ALLCAPS;
常量UInt32的CFE_HIDDEN = CFM_HIDDEN;
常量UInt32的CFE_OUTLINE = CFM_OUTLINE;
常量UInt32的CFE_SHADOW = CFM_SHADOW;
常量UInt32的CFE_EMBOSS = CFM_EMBOSS;
常量UInt32的CFE_IMPRINT = CFM_IMPRINT;
常量UInt32的CFE_DISABLED = CFM_DISABLED;
常量UInt32的CFE_REVISED = CFM_REVISED;// CFE_AUTOCOLOR和CFE_AUTOBACKCOLOR对应CFM_COLOR和
// CFM_BACKCOLOR,分别控制它们
常量UInt32的CFE_AUTOBACKCOLOR = CFM_BACKCOLOR;
#endregion
#区域CFM_
// CHARFORMAT口罩
常量UInt32的CFM_BOLD = 00000001;
常量UInt32的CFM_ITALIC = 0x00000002;
常量UInt32的CFM_UNDERLINE = 0x00000004;
常量UInt32的CFM_STRIKEOUT = 0x00000008;
常量UInt32的CFM_PROTECTED = 0x00000010;
常量UInt32的CFM_LINK = 0x00000020; //交易所超级链接扩展
常量UInt32的CFM_SIZE = 0x80000000的;
常量UInt32的CFM_COLOR = 0x40000000之后;
常量UInt32的CFM_FACE = 0x20000000;
常量UInt32的CFM_OFFSET = 0x10000000处;
常量UInt32的CFM_CHARSET = 0x08000000;常量UInt32的CFM_SMALLCAPS =×0040; //(*)
常量UInt32的CFM_ALLCAPS = 0x0080; // 3.0显示
常量UInt32的CFM_HIDDEN = 0100; // 3.0隐藏
常量UInt32的CFM_OUTLINE = 0x0200; //(*)
常量UInt32的CFM_SHADOW = 0x0400的时候; //(*)
常量UInt32的CFM_EMBOSS = 0x0800的; //(*)
常量UInt32的CFM_IMPRINT = 0x1000的; //(*)
常量UInt32的CFM_DISABLED =为0x2000;
常量UInt32的CFM_REVISED = 0x4000的;常量UInt32的CFM_BACKCOLOR = 0x04000000;
常量UInt32的CFM_LCID = 0x02000000;
常量UInt32的CFM_UNDERLINETYPE = 0x00800000; //很多3.0显示
常量UInt32的CFM_WEIGHT = 0x00400000;
常量UInt32的CFM_SPACING = 0x00200000; // 3.0显示
常量UInt32的CFM_KERNING = 0x00100000; //(*)
常量UInt32的CFM_STYLE = 0x00080000; //(*)
常量UInt32的CFM_ANIMATION = 0x00040000; //(*)
常量UInt32的CFM_REVAUTHOR = 0x00008000;常量UInt32的CFE_SUBSCRIPT = 0x00010000在; //标和下标是
常量UInt32的CFE_SUPERSCRIPT = 0x00020000; //互斥常量UInt32的CFM_SUBSCRIPT =(CFE_SUBSCRIPT | CFE_SUPERSCRIPT);
常量UInt32的CFM_SUPERSCRIPT = CFM_SUBSCRIPT;// CHARFORMAT“ALL”口罩
常量UInt32的CFM_EFFECTS =(CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR |
CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK);
常量UInt32的CFM_ALL =(CFM_EFFECTS | CFM_SIZE | CFM_FACE | CFM_OFFSET | CFM_CHARSET);常量UInt32的CFM_EFFECTS2 =(CFM_EFFECTS | CFM_DISABLED | CFM_SMALLCAPS | CFM_ALLCAPS
| CFM_HIDDEN | CFM_OUTLINE | CFM_SHADOW | CFM_EMBOSS
| CFM_IMPRINT | CFM_DISABLED | CFM_REVISED
| CFM_SUBSCRIPT | CFM_SUPERSCRIPT | CFM_BACKCOLOR);常量UInt32的CFM_ALL2 =(CFM_ALL | CFM_EFFECTS2 | CFM_BACKCOLOR | CFM_LCID
| CFM_UNDERLINETYPE | CFM_WEIGHT | CFM_REVAUTHOR
| CFM_SPACING | CFM_KERNING | CFM_STYLE | CFM_ANIMATION);
#endregion
}
更多你问?
我用这个最透过一个包装此为所有样式和图标的差异小的实用工具类。这样你就可以改变字体大小,而不是更改图标的名称等。
类RichTextStyle
{
私人只读控制_textEdit;
私人只读CHARFORMAT2 _charFormat;公共RichTextStyle(RichTextBox的TE)
{
_textEdit = TE;
_charFormat =新CHARFORMAT2();
_charFormat.cbSize = Marshal.SizeOf(_charFormat);
SendMessage函数(te.Handle,EM_GETCHARFORMAT,SCF_SELECTION,楼盘_charFormat);
}私人无效SetEffect(UInt32的面膜,效果UInt32的,布尔有效)
{
CHARFORMAT2 FMT =新CHARFORMAT2();
fmt.cbSize = Marshal.SizeOf(FMT);
fmt.dwMask =口罩;
fmt.dwEffects =有效吗?功效:0;
SendMessage函数(_textEdit.Handle,EM_SETCHARFORMAT,SCF_SELECTION,楼盘FMT);
}私人布尔GetEffect(UInt32的面膜,效果UInt32的)
{
返回(0 =(_charFormat.dwMask&放大器;!掩模))及&放大器; (0 =(_charFormat.dwEffects&放大器;!效应));
}公共BOOL大胆{{返回GetEffect(CFM_BOLD,CFE_BOLD); }集合{SetEffect(CFM_BOLD,CFE_BOLD,价值); }}
公共BOOL斜体{{返回GetEffect(CFM_ITALIC,CFE_ITALIC); }集合{SetEffect(CFM_ITALIC,CFE_ITALIC,价值); }} // ...等...等...你的想法。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-130283-1.html
等我们足够强大了再还击
是人的基本需要