在vb2008中如何子类化(即获取窗体上别的控件的消息)

lmhcs 2011-02-11 08:10:12
在我自己写个控件,想实现文本框的自动完成.我现在想拦截文本框的一些输入比如insert键,该如何实现呢.记得在vb6可以通过子类化可以拦截.不知道vb.net如何实现.请达人指教.

...全文
196 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2011-02-12
  • 打赏
  • 举报
回复
别绕道了,文本框的自动完成,直接看看AutoComplete属性。
lmhcs 2011-02-12
  • 打赏
  • 举报
回复
谢谢楼上的连接和c#的代码,我研究下.呵呵.不过偶是业余的,看起来好象挺难的样子.
to wuyazhe 朋友,AutoComplete我也知道.不过有点不足的地方.就是当文本框什么输入也没有的时候,我不知道怎么让他弹出来,郁!好象它只有在输入内容的时候它才会自动完成.我的是vb2008+winxp sp3
机器人 2011-02-11
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;

namespace MessageFilter
{
public partial class MessageWatcher : UserControl
{
private MessageInspector _msgInspector = null;

public MessageWatcher()
{
InitializeComponent();
}

bool _msgInspector_InspectMessage(Message arg)
{
Control ctrl = Control.FromHandle(arg.HWnd);
if (ctrl == null) return false;
if (ctrl.Name == "lblSender") return false;
if (ctrl.Name == "lblMsg") return false;
lblSender.Text = ctrl.Name;
lblMsg.Text = arg.ToString();
return false;
}

private void MessageWatcher_Load(object sender, EventArgs e)
{
_msgInspector = MessageInspector.Instance();
_msgInspector.InspectMessage += new Func<Message, bool>(_msgInspector_InspectMessage);
}
}

internal class MessageInspector : IMessageFilter
{
public event Func<Message, bool> InspectMessage;

private MessageInspector()
{ }

private static MessageInspector _inspector;

public static MessageInspector Instance()
{
if (_inspector == null)
{
_inspector = new MessageInspector();
Application.AddMessageFilter(_inspector);
}
return _inspector;
}

public bool PreFilterMessage(ref Message m)
{
if (InspectMessage != null)
return InspectMessage(m);
else
return false;
}
}
}

用这个UserControl,可以监视其他所有控件收到的Message。
lmhcs 2011-02-11
  • 打赏
  • 举报
回复
可能我说得不是很清楚.在from1窗体上有一个文本框textbox1,有一个usercontrol控件,usercontrol自己写的.现在我需要在usercontrol控件上获取textbox1的一些消息,比如拦截 insert按健消息或者其他消息.
在vb6我们可以通过子类化textbox拦截它的消息,在vb.net我们也可以创建一个继承自textbox的子类,然后重载WndProc拦截到消息
但我现在需要的是,我在usercontrol控件中拦截textbox消息
wuyq11 2011-02-11
  • 打赏
  • 举报
回复
Dim hEdit As Integer = FindWindowEx(p.MainWindowHandle, 0, "Edit", "")
Dim w As String = " "
Dim ptr As IntPtr = Marshal.StringToHGlobalAnsi(w)
If SendMessage(hEdit, WM_GETTEXT, 100, ptr) Then
Console.WriteLine(Marshal.PtrToStringAnsi(ptr))
End If
wukaixin 2011-02-11
  • 打赏
  • 举报
回复
我个人觉得,你可以子类化TextBox控件,去掉不用的消息。
你这种需求无非就是想防止被窃取文本框的信息或者屏蔽一些功能













------------------------------------------------------------------------------------------------
http://www.jiemengwu.com/ 解梦屋 http://www.phpzy.com/php/ 绿色php资源http://www.shopfw.com网店服务
Apisoft Data analysis Activex 提供了91种二维和三维的图表样式,并提供了30种数学和统计函数供您选择,支持无限个多轴线及21种候选颜色。 Apisoft Data analysis Activex 是一个使用XP基本风格(线图,条形图,区域图,饼状图,点图) 计和运行时均易于使用Apisoft Data analysis Activex 包含强大而全面的针对几乎所有的控件和子控件的编辑器对话框。这些编辑器在程序设计和运行时都可使用。Apisoft Data analysis Activex控件(具有图 表类按钮的工具条)提供了对Apisoft Data analysis Activex编辑器的一键访问,打印预览对话框和通用性的特征。 Apisoft Data analysis Activex是完全基于对象类 几乎所有的东西都是一个对象或是属于一个对象类属性、方法、事件均遵循通用性和一致性风格。从技术层面上来说,Apisoft Data analysis Activex由160个模块,80个表格屏幕总共798个对象类组成。每一个类都有自己的属性,在大部分情况下,这些属性都是一些来自于Apisoft Data analysis Activex API或Borland\\\\\\\'s VCL 类库的子类强大的帮助文档和程序实例帮助文档包括有参考向导、用户向导、详细的使用说明手册、终端用户帮助、丰富的程序实例(包含有376个窗体程序所有的源代码)Apisoft Data analysis Activex帮助文档遵循Borland帮助文档系统的外观风格和原理,并且在程序设计阶段与集成开发平台完全整合在一起。按F1键可以获得所有相关帮助。

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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