社区
C#
帖子详情
c# winform中一个比较难的问题,高手请进
yueshihun
2008-12-05 11:36:43
用textbox和listbox做成一个类似的combobox功能,用一个ListBox模拟下拉框,但关键在于一旦TextBox失去焦点,必须将下拉框收起(失去焦点不难判断,但关键在于鼠标点击了窗体或者Label这样的控件,控件并没有失去焦点,但也要收起下拉框)。 如何实现此种收起下拉框的操作?
...全文
324
21
打赏
收藏
c# winform中一个比较难的问题,高手请进
用textbox和listbox做成一个类似的combobox功能,用一个ListBox模拟下拉框,但关键在于一旦TextBox失去焦点,必须将下拉框收起(失去焦点不难判断,但关键在于鼠标点击了窗体或者Label这样的控件,控件并没有失去焦点,但也要收起下拉框)。 如何实现此种收起下拉框的操作?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gislqy
2008-12-05
打赏
举报
回复
可不可以在textbox的MouseLeave事件中,鼠标离开后就收起
RexZheng
2008-12-05
打赏
举报
回复
用ToolStripDropDown做,把listbox放到ToolStripControlHost,再放到ToolStripDropDown中
ToolStripDropDown封装了完成焦点和位置问题
net5i
2008-12-05
打赏
举报
回复
如果搂主这个不是一个用户控件,需要在Form类的窗口过程里面判断消息:
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x210) //WM_PARENTNOTIFY
{
隐藏列表
}
base.WndProc(ref m);
}
wb186
2008-12-05
打赏
举报
回复
为什么不直接用combbox呢?
lijunfeng
2008-12-05
打赏
举报
回复
不好意思刚翻了一下以前的代码搞错了,那是解决另一个问题的.
lijunfeng
2008-12-05
打赏
举报
回复
把textbox放到一个panel里,只判断panel的失去焦点事件,这样就没问题了,我自己也是经常这样做的.
tianshangfei
2008-12-05
打赏
举报
回复
oo
tianshangfei
2008-12-05
打赏
举报
回复
oo
net5i
2008-12-05
打赏
举报
回复
回搂主18楼:
可以在自己的控件中实现该接口,例如:
public class MyControl : UserControl, IMessageFilter
{
public MyControl()
{
Application.AddMessageFilter(this);//把消息循环添加到应用程序
}
~MyControl()
{
Application.RemoveMessageFilter(this);//删除消息循环从应用程序中
}
bool IMessageFilter.PreFilterMessage(ref Message m)
{
//左边鼠标键弹起,注意判断鼠标的位置是否在该控件内部
if (m.Msg == (int)Win32.Msgs.WM_LBUTTONUP)
{
}
return OnPreFilterMessage(ref m);
}
protected virtual bool OnPreFilterMessage(ref Message m)
{
return false;
}
}
LorenLiu
2008-12-05
打赏
举报
回复
[Quote=引用 15 楼 aioloscamus 的回复:]
把listbox放在一个form上 在form 的deactive事件里 form.hide()
[/Quote]
在listbox的lostfocus事件中form.hide()
你还需要一个button,在button的mousedown时,去show这个form
也就是说,textbox和button是可以放在一个自定义的控件中的,而带listbox的form是动态show/hide的
haha0369
2008-12-05
打赏
举报
回复
已经有人回答了
yueshihun
2008-12-05
打赏
举报
回复
我的是单独控件哦,这个是要在利用这个控件窗体上实现的吧?
[Quote=引用 9 楼 net5i 的回复:]
否则是单独控件的话,搂主需要实现这个消息泵接口:IMessageFilter,其实以上两种情况下都可以用这个
最主要是要实现该接口的下面方法:
bool IMessageFilter.PreFilterMessage(ref Message m)
{
if (m.Msg == (int)Win32.Msgs.WM_LBUTTONUP) //按下鼠标键
else if (m.Msg == (int)Win32.Msgs.WM_CAPTURECHANGED)
else if (m.Msg == (int)Win32.Msgs.WM_KEYDOWN && (int)m.WParam == (int)Keys.Escape)//键盘键 …
[/Quote]
yueshihun
2008-12-05
打赏
举报
回复
我的是一个自定义的控件哦,能够在自定义控件中添加form么?
[Quote=引用 15 楼 aioloscamus 的回复:]
把listbox放在一个form上 在form 的deactive事件里 form.hide()
[/Quote]
yueshihun
2008-12-05
打赏
举报
回复
我用ToolStripDropDown试了一下,发现当它显示的时候,我就看不到焦点在哪个控件了。
例如,当textbox获得焦点时,显示ToolStripDropDown,这时焦点就不在textbox上了,这个你是怎么解决的呢?
aioloscamus
2008-12-05
打赏
举报
回复
把listbox放在一个form上 在form 的deactive事件里 form.hide()
hxyabc092088
2008-12-05
打赏
举报
回复
直接用combobox搞
null1
2008-12-05
打赏
举报
回复
http://auction1.taobao.com/auction/item_detail-0db2-ea4731c3151105140db23b526e63585a.jhtml
LorenLiu
2008-12-05
打赏
举报
回复
mark一下
liuxp1987
2008-12-05
打赏
举报
回复
在窗体个加个单击事件来收起,不就可以了?
birdlonger
2008-12-05
打赏
举报
回复
mark !
加载更多回复(1)
C#
实现CheckedListBox添加删除显示功能实战
CheckedListBox 是 Windows Forms
中
一个
功能强大的复合型控件,它将 ListBox 的列表选择功能与 CheckBox 的状态标记能力相结合,广泛应用于多选场景。用户不仅可以从列表
中
选择多个条目,还能通过复选框来标记每个条目的状态(如选
中
、未选
中
或不确定)。在
C#
开发
中
,CheckedListBox 常用于权限配置、多选过滤、任务清单等场景。其核心属性包括Items(存储列表项)、(获取选
中
项)和(控制是否点击文本即可打勾)。
C#
图解教程 第二十章 异步编程
笔记 启动
一个
程序,系统在内存
中
创建
一个
新进程,进程内部是系统创建的线程,线程可以派生其他线程,这就有了多线程。进程内的多个线程共享进程的资源,系统为处理器规划的单元是线程。 异步编程可以实现在新线程里面运行一部分代码,或改变代码的执行顺序。 本章介绍了以下几种异步编程方式,它们居多是并发的而非并行。 async/await .NET4.5以上才支持(4.0可以用扩展包支持...
自制小笔记_
C#
后期相关
问题
解决方案
C#
是一种功能强大、易于学习的编程语言,具有以下几个优势和好处:**
C#
,深入浅出全接触
C#
,深入浅出全接触青苹果工作室(编译)目 录 表一、什么是
C#
?二、Java与
C#
三、
C#
的主要特征四、安装运行环境五、
C#
编辑器六、
C#
的程序结构七、
C#
和名称空间八、
C#
中
一个
经典例程的编写与编译九、
C#
编程实战演习ABC 1、使用Visual Studio .NET编写
C#
程序 2、使用Visual
C#
创建Windows应用程序 3、创建
C#
类库(Dll)一、什
C#
实现万年历:获取和展示当前时间的全部信息
C#
(读作“See Sharp”)是一种由微软开发和维护的面向对象的编程语言,它于2000年随.NET框架首次发布,并随着时间的推移而不断进化,成为当今开发环境
中
的一种主流语言。由于其现代性、类型安全性和灵活性,
C#
在各种应用程序开发
中
得到了广泛应用,包括但不限于:桌面应用程序:利用WPF (Windows Presentation Foundation) 和Windows Forms可以创建丰富的桌面用户界面。Web应用程序。
C#
111,125
社区成员
642,540
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章