我想在我的Windows窗体应用程序上自定义Rich Text Box控件。 RichTextbox将用于输入文本数据,一旦完成,将通过SMS文本消息发送。
要求是文本不能有任何换行符,因为一些较旧的移动电话不能正确显示信息并且它会丢失其格式。
我需要做的是在将剪贴板数据粘贴到RTB之前捕获剪贴板数据并自定义其格式,例如删除换行符。
我在这里找到了一个例子,它在某种程度上有效,但是可以粘贴到其他控件中: -
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if((keyData == (Keys.Control | Keys.V)))
{
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Text))
{
string contents = Clipboard.GetText().Replace("\r\n", " ");
Clipboard.SetData(DataFormats.Text, contents);
richTextBox1.Paste();
}
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
有人知道我应该怎么做吗?
答案 0 :(得分:1)
您需要从RichTextBox继承,并按照您自己的描述添加自定义处理;您还可以将原始数据设置回剪贴板,以便将其粘贴到其他控件中(原始格式):
public class CustomRTB:RichTextBox
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((keyData == (Keys.Control | Keys.V)))
{
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Text))
{
string contents = Clipboard.GetText();
// string newText = *process text here*
Clipboard.SetData(DataFormats.Text, newText);
this.Paste();
Clipboard.SetData(DataFormats.Text, contents);
}
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}
}
答案 1 :(得分:1)
尝试在文本发生变化时捕获文本并删除换行符:
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
RichTextBox box = (RichTextBox)sender;
box.Text = box.Text.Replace(Environment.NewLine, string.Empty);
box.Text = box.Text.Replace("\n", string.Empty);
box.SelectionStart = box.TextLength;
box.ScrollToCaret();
}