解决方案 »

  1.   

    直接写窗体的MouseUp就可以了。
      

  2.   


    我那控件是个自定义控件,要做的操作是自定义控件内部的事情,不适合让窗体来直接插手。目前是在OnHandleCreated里面挂接父容器的Click对象
            protected override void OnHandleCreated(EventArgs e)
            {
                this.Parent.Click += new EventHandler(Parent_Click);
            }不知道还有没有别的什么更好办法
      

  3.   

    http://download.csdn.net/detail/caozhy/7601021
      

  4.   

    楼主,你在对你自定义控件做些动作(比如点击之类的)后,让主Form捕捉鼠标,SetCapture;然后再点击其他地方(不只是空白处,其他控件上也可以)时,就会响应Form的点击事件。
    如果像版主给的那种表现的话,没有其他办法的话,也可以用低级鼠标钩子,这个钩子要在自定义控件中,并且最好是使用后立即卸载了,我以前做一个扩展ComboBox的自定义控件时用过
      

  5.   

    http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mousedown(v=vs.110).aspxC#的MouseDown事件
      

  6.   

    做ComboBox有更好的办法:http://bbs.csdn.net/topics/390231481
      

  7.   

    通过pointf和contain来处理,类似ios和android的touch
      

  8.   


    有点事,来晚了顺便问一下,微软说ControlMouseUp 事件:在鼠标指针在控件上并释放鼠标键时发生。为啥在窗体点击鼠标,会触发UserControl1_MouseUp呢?谢谢
      

  9.   

    仔细看我给你的代码以及
    http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.capture.aspx当控件已捕获鼠标时,它接收鼠标输入,不论光标是否在其边框内。 通常只有在执行拖动操作时才捕获鼠标。 
      

  10.   

    6L提到的SetCapture,也是这个意思,.NET的capture属性其实就是对api函数SetCapture ReleaseCapture的封装。
    其他人的回答都没有说到要点。
      

  11.   


    明白你的代码了,不过,貌似没法用。因为,如果用鼠标点击了下拉框里面的项目,这个capture好像就被改了。再点击窗体就没作用了。
      

  12.   

    在ListBox的单击中再写一遍。的确有个bug,懒得改了。
      

  13.   

    谁有闲心反编译看看标准的ComBox是咋处理这个问题的?
      

  14.   

     ComboBox没有用这个机制,用的是弹出窗口,介绍在8L。我的代码也是可以的,你自己修改下。它的问题主要是,因为是控件,所以下拉不能超出窗体范围。这个在那个文章也提到的。
      

  15.   


    嗯,谢谢解答,我那个自定义控件里面都是自定义控件,里面的控件里面还是一个自定义控件,实在不想改代码了凑合用父容器的click吧再次感谢
      

  16.   

    可以试试窗体的PreviewClick事件。它是反向冒泡的。