winform自定义控件如何在窗体空白处点击,隐藏自己的弹出层

掌握永恒需控制现在 2014-01-06 04:18:57

如图:A为我的自定义控件。当在B处点击的时候A里面的下拉弹出层会隐藏
...全文
517 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你的自定义控件不是只有文本输入框和一个下拉列表么?
  • 打赏
  • 举报
回复
引用 15 楼 vb763305825 的回复:
用户控件绑定这两个事件,失去焦点的时候把下列列表隐藏
            this.GotFocus += (sender, e) =>
                {
                    list.Show();
                };

            this.LostFocus += (sender, e) =>
                {
                    list.Hide();
                };
只有点击另外控件的时候 才会失去焦点不是么?现在是点击空白区域
  • 打赏
  • 举报
回复
引用 11 楼 BenBenBears 的回复:
自定义控件添加一个属性即可。
什么属性?
BenBenBears 2014-01-07
  • 打赏
  • 举报
回复
自定义控件添加一个属性即可。
  • 打赏
  • 举报
回复
引用 7 楼 c02645 的回复:
public form1() { InitializeComponent(); setMousedown(this.Controls); } private void setMousedown(Control.ControlCollection cons) { foreach (Control ctl in cons) { if(ctl.Name!="用户控件Name") ctl.MouseDown += new MouseEventHandler(ctl_MouseDown); if (ctl.HasChildren) { setMousedown(ctl.Controls); } } } void ctl_MouseDown(object sender, EventArgs e) { 用户控件Name.Visible=false; }
我的意思是在自定义控件里面 就已经写好了 而不是在每个窗体里面再去一个个的写这些
  • 打赏
  • 举报
回复
引用 5 楼 dylike 的回复:
窗体的可激活属性为true,编写左边控件的LostFocus代码中隐藏自身。
如果窗体不设置这个属性呢?那就是没办法了啊 在B处点击 text不失去焦点的
  • 打赏
  • 举报
回复
引用 4 楼 BenBenBears 的回复:
[quote=引用 3 楼 liang_show 的回复:] [quote=引用 2 楼 BenBenBears 的回复:] [quote=引用 1 楼 liang_show 的回复:] 没人回答?还是我表述的不清?或者确实没人遇到同样的问题?
确实是不清楚。[/quote] 哪里不清楚了?[/quote] 是winform还是wpf?自定义的控件A输入框和下拉列表是分开的还是一起的?[/quote] 题目不是都说清楚了么?相对于窗体来说 输入框和下拉列表是一起的 但是针对于自定义控件来说 这两个是分开的
  • 打赏
  • 举报
回复
用户控件绑定这两个事件,失去焦点的时候把下列列表隐藏
            this.GotFocus += (sender, e) =>
                {
                    list.Show();
                };

            this.LostFocus += (sender, e) =>
                {
                    list.Hide();
                };
帅得_被人砍 2014-01-07
  • 打赏
  • 举报
回复
影藏属性设为FLASE
BenBenBears 2014-01-07
  • 打赏
  • 举报
回复

private bool isHide;
public bool HideList
{
  get{return isHide;}
  set{
       isHide=value;
       if(isHide)
       {
       //这里添加隐藏下拉控件的代码,比如将它的visible属性设置为false
       }
       else
       {
       //显示控件
       }
      
     }
}
c02645 2014-01-06
  • 打赏
  • 举报
回复
public form1() { InitializeComponent(); setMousedown(this.Controls); } private void setMousedown(Control.ControlCollection cons) { foreach (Control ctl in cons) { if(ctl.Name!="用户控件Name") ctl.MouseDown += new MouseEventHandler(ctl_MouseDown); if (ctl.HasChildren) { setMousedown(ctl.Controls); } } } void ctl_MouseDown(object sender, EventArgs e) { 用户控件Name.Visible=false; }
c02645 2014-01-06
  • 打赏
  • 举报
回复
两种方法 1、控件的失去焦点就隐藏 2、遍历窗体的所有控件,给每个控件添加MouseDown事件,MouseDown事件内隐藏该用户控件 //初始化 setMousedown(this.Controls); private void setMousedown(Control.ControlCollection cons) { foreach (Control ctl in cons) { ctl.MouseDown += new MouseEventHandler(ctl_MouseDown); if (ctl.HasChildren&&ctl.Name!="用户控件Name") { setMousedown(ctl.Controls); } } } void ctl_MouseDown(object sender, EventArgs e) { 用户控件Name.Visible=false; }
dylike 2014-01-06
  • 打赏
  • 举报
回复
窗体的可激活属性为true,编写左边控件的LostFocus代码中隐藏自身。
BenBenBears 2014-01-06
  • 打赏
  • 举报
回复
引用 3 楼 liang_show 的回复:
[quote=引用 2 楼 BenBenBears 的回复:] [quote=引用 1 楼 liang_show 的回复:] 没人回答?还是我表述的不清?或者确实没人遇到同样的问题?
确实是不清楚。[/quote] 哪里不清楚了?[/quote] 是winform还是wpf?自定义的控件A输入框和下拉列表是分开的还是一起的?
  • 打赏
  • 举报
回复
引用 2 楼 BenBenBears 的回复:
[quote=引用 1 楼 liang_show 的回复:] 没人回答?还是我表述的不清?或者确实没人遇到同样的问题?
确实是不清楚。[/quote] 哪里不清楚了?
BenBenBears 2014-01-06
  • 打赏
  • 举报
回复
引用 1 楼 liang_show 的回复:
没人回答?还是我表述的不清?或者确实没人遇到同样的问题?
确实是不清楚。
  • 打赏
  • 举报
回复
没人回答?还是我表述的不清?或者确实没人遇到同样的问题?

110,545

社区成员

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

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

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