我想要实现一个类似于ComboBox的控件,当用户点击时弹出一个无焦点的窗体,上面显示不同的选项供用户选择。如果用户不选择任何项时,在无焦点窗体外的任意位置单击,窗体即消失。弹出无焦点窗体用的是重载窗体的“ShowWithoutActivation”属性并返回True实现,但是如何才能让窗体自动关闭呢?是不是接收某个系统消息(应该是哪个)?或者是不是不应该使用窗体去实现呢?谢谢

解决方案 »

  1.   

    ContextMenuStrip 控件,类似桌面右键菜单
      

  2.   

    http://www.cnblogs.com/xuchonglei/archive/2011/09/16/2178713.html
      

  3.   

    定一个静态类
    public static class Test
    {
        public static string value;
    }
    在form1中
    Test.value=this.ComboBox.Text;
    在你弹出的窗体中
    if(Test.Text.Trim()=="")
    {
        //关闭
    }
    else
    {
        //操作
    }
      

  4.   

    直接结束进程。
    Process[] allProgress = System.Diagnostics.Process.GetProcessesByName("名字");
    foreach (Process closeProgress in allProgress)
    {
    if (closeProgress.ProcessName.Equals("名字"))//                   
     {
     closeProgress.Kill();
    continue;                   
     }
    }
      

  5.   

    不一定非要窗体啊,用个Panel也可以啊,用Visible控制显示与否多方便。。
      

  6.   

    显示的下拉列表不一定是Combo样式的List,而是自定义的窗体,可能有按钮,文本框等,主要是为了在下拉列表外的任何地方点击鼠标,下拉列表窗体能够自动关闭。
      

  7.   

    虽然这个方法很差劲,但还是能实现你说的效果        private List<Form> formList = new List<Form>();
            private void start_Click(object sender, EventArgs e)
            {
                Form2 form = new Form2();
                form.Location = ...;
                form.Show();
                formList.Add(form);
            }
            private void Form1_Click(object sender, EventArgs e) {
                foreach (Form form in formList) {
                    form.Close();
                }
                formList.Clear();
            }