我希望在我的 Windows 窗体应用程序上自定义富文本框控件。 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);
}
}
有人知道我应该怎么做吗?
最佳答案
需要继承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);
}
}
}
关于c# 重写 RichTextBox 粘贴函数 - Win Form App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12407512/