小女子,求助,急急,30分 winform monthCalendar可见性的问题

yongzhoujuan 2012-06-06 05:04:28
下面这行代码,能实现鼠标在其他任何地方点击,能关闭monthCalendar这个控件,但是 点击 上一个月 下一个月 按钮时,monthCalendar控件 关闭了我要的是显示,不能关闭。因为这样的话,我的在点击一下文本框才能显示日期

public partial class Form1 : Form, IMessageFilter
{

public Form1()
{
InitializeComponent();
Application.AddMessageFilter(this);

}
public bool PreFilterMessage(ref Message m)
{
if (monthCalendar1.Visible)
{
if (m.Msg >= 0x0201 && m.Msg <= 0x0209)
{
monthCalendar1.Visible = false;
}
}

if (monthCalendar2.Visible)
{
if (m.Msg >= 0x0201 && m.Msg <= 0x0209)
{
monthCalendar2.Visible = false;
}
}

return false;
}
...全文
186 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongzhoujuan 2012-06-06
  • 打赏
  • 举报
回复
太感谢两位了,两种方式都能实现,但是消息机制更好,选择了日期后,点击,自动关闭控件了。虽然我不知道什么是消息机制,领导临时安排的活。从网上搜了不少资料,真是谢谢各位
ParanoidKing 2012-06-06
  • 打赏
  • 举报
回复

if (m.Msg >= 0x0201 && m.Msg <= 0x0209)
{
Point pMouse = this.PointToClient(MousePosition);
Point pCalendar = monthCalendar1.Location;
if (!(pMouse.X > pCalendar.X && pMouse.X < (pCalendar.X + monthCalendar1.Width) && pMouse.Y > pCalendar.Y && pMouse.Y < (pCalendar.Y + monthCalendar1.Height)))
{
monthCalendar1.Visible = false;
}
}

我觉得没必要用消息吧,在窗体的MouseClick事件里写就好了

this.MouseClick += new MouseEventHandler((sender, e) =>
{
if (e.Button == MouseButtons.Left)
{
Point pMouse = e.Location;
Point pCalendar = monthCalendar1.Location;
if (!(pMouse.X > pCalendar.X && pMouse.X < (pCalendar.X + monthCalendar1.Width) && pMouse.Y > pCalendar.Y && pMouse.Y < (pCalendar.Y + monthCalendar1.Height)))
{
monthCalendar1.Visible = false;
}
}
});
cnfixit 2012-06-06
  • 打赏
  • 举报
回复
这个多半应该判断鼠标点击的位置是否在控件区域内,在就不隐藏,不在就隐藏

111,126

社区成员

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

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

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