c# WinForm程序 重写Ctr+V

lvfeng19806001 2010-11-13 10:35:52
c# WinForm程序 当在TextBox控件中Ctr+V时,不想让他执行系统的粘贴操作,而让他执行我的一个自定义方法,如何实现?
...全文
391 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)
内容概要:本文围绕“空地多无人平台协同路径规划技术”的论文复现展开,重点介绍了基于Matlab的多无人机与地面无人平台协同路径规划的算法实现与仿真研究。研究系统性地整合了无人机三维路径规划、动态避障、多机协同、任务分配及防撞机制等核心技术,结合智能优化算法(如遗传算法、粒子群算法、灰狼优化算法等)与经典路径规划模型(如Dubins路径、A*、RRT等),在复杂威胁环境下实现了高效、安全的协同路径规划。文中提供了完整的Matlab代码支持,便于科研人员进行算法验证、性能对比与二次开发,并强调通过复现高水平学术论文(如EI、SCI期刊及硕博论文)深入掌握该领域的前沿方法与技术路线。; 适合人群:具备一定Matlab编程基础,从事无人机系统、自动化控制、人工智能、路径规划等相关领域研究的研究生、科研人员及工程技术人员,尤其适用于正在开展科研项目、撰写学位论文或希望提升算法实践能力的研究者。; 使用场景及目标:① 复现并深入理解空地协同路径规划领域的高水平论文算法;② 掌握Matlab在多智能体路径规划中的建模、仿真与可视化方法;③ 应用于科研课题、毕业设计、项目申报及算法创新实践中,提升研究的技术深度与工程可行性。; 阅读建议:建议结合文中提供的网盘资源(含完整代码、仿真模型及参考文献资料)同步学习,优先选择与自身研究方向契合的案例进行复现,注重算法原理与代码实现之间的映射关系,并在掌握基础方案后尝试进行参数调优、算法融合或引入新约束条件以实现改进与创新。

111,129

社区成员

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

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

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