c# WinForm程序 重写Ctr+V

lvfeng19806001 2010-11-13 10:35:52
c# WinForm程序 当在TextBox控件中Ctr+V时,不想让他执行系统的粘贴操作,而让他执行我的一个自定义方法,如何实现?
...全文
388 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-11-16
  • 打赏
  • 举报
回复
描述准确自己的问题是多么重要…
如果你想知道如何将粘贴内容拦截,那应该直接跳过键盘,考虑消息,你这样能处理右键弹出式菜单的粘贴么?呵呵
lvfeng19806001 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 deyygywxf 的回复:]
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
{
//下面写代自己的代码
if (Clipboard.ContainsText())
{
this.textBox1.SelectedText……
[/Quote]
首先感谢大家,用了很多办法,最后发现22楼这种居然能解决,最后加句e.handled=true就行了.
deyygywxf 2010-11-15
  • 打赏
  • 举报
回复
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
{
//下面写代自己的代码
if (Clipboard.ContainsText())
{
this.textBox1.SelectedText = Clipboard.GetText();
}
}
}

yc421206 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 lvfeng19806001 的回复:]
c# WinForm程序 当在TextBox控件中Ctr+V时,不想让他执行系统的粘贴操作,而让他执行我的一个自定义方法,如何实现?
[/Quote]
你得捕捉TextBox的KeyPress事件
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
char value = e.KeyChar;
int key = (int)value;
if (key != 22)
return;
//TODO
}

dell0923 2010-11-14
  • 打赏
  • 举报
回复
重写TextBox的WndProc方法
  • 打赏
  • 举报
回复
这个学习的
lvfeng19806001 2010-11-14
  • 打赏
  • 举报
回复
谢谢各位!
wangwenzhuang 2010-11-14
  • 打赏
  • 举报
回复
钩子 http://blog.csdn.net/wangwenzhuang/archive/2010/09/29/5913695.aspx
doubleu2005 2010-11-14
  • 打赏
  • 举报
回复
用键盘钩子,拦截ctrl+V事件,然后自己操作
兔子-顾问 2010-11-14
  • 打赏
  • 举报
回复
public class MyTextBox : TextBox
{
protected override void OnKeyDown(KeyEventArgs e)
{
handled = e.Handled = e.Control && e.KeyCode == Keys.V;
base.OnKeyDown(e);
}
bool handled = false;
protected override void OnKeyPress(KeyPressEventArgs e)
{
e.Handled = handled;
if (handled && CtrlVPressed != null) CtrlVPressed(this, e);//触发事件
base.OnKeyPress(e);
handled = false;
}

public event EventHandler CtrlVPressed;
}

使用这个控件,注册CtrlVPressed事件即可。
特别 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lvfeng19806001 的回复:]

引用 11 楼 sdfkfkd 的回复:
引用 10 楼 lvfeng19806001 的回复:

试了一下,那个属性好像连剪贴和复制也禁了!
明天去再试吧,谢谢美羊羊了!

是的,实际上是禁用了文本框中的快捷菜单,所有功能都禁用了,需要自己实现

那就太麻烦了,有没有其他办法。
[/Quote]
键盘钩子,怎么用?我也不会,自己搜搜
lvfeng19806001 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sdfkfkd 的回复:]
引用 10 楼 lvfeng19806001 的回复:

试了一下,那个属性好像连剪贴和复制也禁了!
明天去再试吧,谢谢美羊羊了!

是的,实际上是禁用了文本框中的快捷菜单,所有功能都禁用了,需要自己实现
[/Quote]
那就太麻烦了,有没有其他办法。
特别 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lvfeng19806001 的回复:]

试了一下,那个属性好像连剪贴和复制也禁了!
明天去再试吧,谢谢美羊羊了!
[/Quote]
是的,实际上是禁用了文本框中的快捷菜单,所有功能都禁用了,需要自己实现
lvfeng19806001 2010-11-13
  • 打赏
  • 举报
回复
试了一下,那个属性好像连剪贴和复制也禁了!
明天去再试吧,谢谢美羊羊了!
特别 2010-11-13
  • 打赏
  • 举报
回复
我试了你上面的方法,Ctr+v是不起作用了,可是他好像进不了自己写的代码中啊,
textBox1.ShortcutsEnabled = false;
if (e.Control && e.KeyCode == Keys.V)
{--进不到这个中
[/Quote]

textBox1.ShortcutsEnabled = false;
这一句应该不能在KeyUp事件中设置,应该在KeyUp事件触发之前就设置
另一个,如果KeyUp事件不行,再试试KeyDown事件,因为KeyDown事件比KeyUp先触发

lvfeng19806001 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sdfkfkd 的回复:]
那查一下有没有类似作用的属性,
如果还不行就有点麻烦了,可能要用API来拦截按键了
你自己搜搜看
按道理来讲,不管他怎么封装,本质应该还是个TextBox,如果是通过 UserControl来组合的话,另当别论
或者你继承这个控件,看看有没有什么保护的方法或者属性
[/Quote]
我试了你上面的方法,Ctr+v是不起作用了,可是他好像进不了自己写的代码中啊,
textBox1.ShortcutsEnabled = false;
if (e.Control && e.KeyCode == Keys.V)
{--进不到这个中
Baesky 2010-11-13
  • 打赏
  • 举报
回复
拦截键盘事件,不管怎么封装,键盘都要触发键盘事件的啊
特别 2010-11-13
  • 打赏
  • 举报
回复
那查一下有没有类似作用的属性,
如果还不行就有点麻烦了,可能要用API来拦截按键了
你自己搜搜看
按道理来讲,不管他怎么封装,本质应该还是个TextBox,如果是通过 UserControl来组合的话,另当别论
或者你继承这个控件,看看有没有什么保护的方法或者属性
lvfeng19806001 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sdfkfkd 的回复:]
首先设置TextBox.ShortcutsEnabled为false
然后的KeyUp事件中写如下代码,假设你的TextBox的Name为textBox1

C# code

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control &a……
[/Quote]

基本TextBox控件有ShortcutsEnabled属性,但我们用的是封装的一个控件,有很多功能!他里面找不到ShortcutsEnabled或相似的属性啊!
还有别的办法吗?
特别 2010-11-13
  • 打赏
  • 举报
回复
首先设置TextBox.ShortcutsEnabled为false
然后的KeyUp事件中写如下代码,假设你的TextBox的Name为textBox1

private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
{
//下面写代自己的代码
if (Clipboard.ContainsText())
{
this.textBox1.SelectedText = Clipboard.GetText();
}
}
}
加载更多回复(3)
内容概要:本文系统介绍了基于核主成分分析(KPCA)的故障检测方法,重点实现了T²和Q统计指数的可视化,并提供了完整的Matlab代码实现与仿真分析流程。该方法通过核函数映射将原始非线性过程数据转换至高维特征空间,进行主成分提取与降维处理,进而构建T²和Q两种统计量用于监控系统运行状态,有效识别工业过程中的早期故障与异常行为。文中详细阐述了KPCA的数学原理、故障检测机制、控制限计算方法,并结合实际案例展示其在复杂非线性系统中的应用效果与优越性,具有较强的工程实用性。; 适合人群:具备一定信号处理、机器学习理论基础及Matlab编程能力的研究生、科研人员和工程技术人员,特别适用于从事工业过程监控、故障诊断、智能制造等相关领域的研究人员。; 使用场景及目标:①应用于化工、电力、制造等行业中关键设备的在线故障监测与早期预警;②作为学术研究中非线性降维与异常检测算法的对比基准;③帮助开发者掌握KPCA模型构建、参数调优及T²-Q统计图可视化等核心技术环节。; 阅读建议:建议读者结合所提供的Matlab代码进行动手实践,深入理解KPCA算法的核心步骤,重点关注核函数选择、主成分数确定及统计量阈值设定等关键参数的影响,以提升故障检测的灵敏度与准确性。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧