我正在使用c#编程,其中有一个richTextBox。
在运行时,我通过编码将一些位图图像插入到richTextBox中。但是我希望防止用户拖动我插入的图像或在richTextBox中粘贴其他图像。
我该如何实现这一点?
谢谢!
我正在使用c#编程,其中有一个richTextBox。
在运行时,我通过编码将一些位图图像插入到richTextBox中。但是我希望防止用户拖动我插入的图像或在richTextBox中粘贴其他图像。
我该如何实现这一点?
谢谢!
private void textbox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
{
Clipboard.SetText((string)Clipboard.GetData("Text"), TextDataFormat.Text);
}
}
通过这样做,您的RichTextBox将仍然允许撤消,并且在有一些文本高亮时也会正常工作(这两个功能都不受Zarathos答案支持,Zarathos的答案在此处:如何使RichTextBox只能输入纯文本?)
DataFormats.Text
而不是"Text"
。 - AntiHeadshot你尝试过将AllowDrop Property设置为False以禁用拖放吗?至于防止内容被复制和粘贴,你可以像SO question建议的那样使用ShortcutsEnabled来禁用快捷键,或者通过使控件ReadOnly来防止粘贴。
我用了这段代码,它完美地运行了:
private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
//if ((Control.ModifierKeys & Keys.Control) == Keys.Control && (e.KeyChar == 'V' || e.KeyChar == 'v'))
if (((int)e.KeyChar) == 22)
{
if(hasImage(Clipboard.GetDataObject()));
{
e.Handled = true;
richTextBox1.Undo();
MessageBox.Show("can't paste image here!!");
}
}
}
private Boolean hasImage(object obj)
{
System.Windows.Forms.RichTextBox richTextBox = new System.Windows.Forms.RichTextBox();
Object data = Clipboard.GetDataObject();
Clipboard.SetDataObject(data);
richTextBox.Paste();
Clipboard.SetDataObject(data);
int offset = richTextBox.Rtf.IndexOf(@"\f0\fs17") + 8; // offset = 118;
int len = richTextBox.Rtf.LastIndexOf(@"\par") - offset;
return richTextBox.Rtf.Substring(offset, len).Trim().Contains(@"{\pict\");
}
并在richTextBox中禁用了拖放功能。
谢谢
offset
和 len
?为什么不使用简单的 richTextBox.Rtf.Contains(@"{\pict\")
? - 8oris