关于窗口中TopMost属性的一个问题

 

在开发一个自定义下拉控件时,由于需要的是一个可调整尺寸的弹出窗口,因此使用了动态生成窗口的方法,在控件的构造过程中生成了一个窗口。在显示下拉列表时显示该窗口,并使用BringToFront()方法将窗口显示在前方。控件功能正常。

使用了一段时间后,用户要求增加类似IE地址栏那样的自动完成功能。即在文本框中输入数据时,弹出窗口并在列表中自动定位匹配的条目,回车确认后自动选择该条目。在增加此功能的过程中,我遇到了一个问题,那就是由于下拉列表与输入数据的文本框不在同一个窗口,一旦输入数据并在列表中找到该记录,并将该记录设置为选中状态,文本框就会失去焦点,这显然是不行的,还要使用Focus()将文本框设置焦点。

问题这时出现了,一旦文本框得到焦点,下拉列表窗口显示到当前自定义下拉控件所在窗口的后面去了。为了解决这个问题,我使用了窗口的TopMost属性将窗口设置为顶层。

public  calss ComboEx
{
     
public ComboEx()
    
{
           ......
           Form frmList
=new Form();
           frmList.TopMost
=true;
           ......
           
    }

    
private void ShowList()
   
{
           frmList.show();
           frmList.BringToFront(); 
   }

}

但是在运行时发现问题没有解决,下拉列表窗口还是会显示到后面去了。后来我无意中将“frmList.TopMost=true;”放在了Show()方法的后面,发现问题解决了。我随后又将语句放在Show()的前面,发现问题又出来了。

public  calss ComboEx
{
     
public ComboEx()
    
{
           ......
           Form frmList
=new Form();
           frmList.TopMost
=true;
           ......
           
    }

    
private void ShowList()
   
{
           frmList.show();
           frmList.TopMost
=true;
           frmList.BringToFront(); 
   }

}

我不知道为什么会这样,按理生成该窗口时设置了这个属性就应该起作用,象在工程开发时添加的窗口对象,一设置了这个属性后,显示时就看到效果了。而这次就不行了,难道是因为这个窗口是动态生成的原因,我对系统底层不是很了解,能力也有限,无法找到答案。只好记录下来,希望对大家有些帮助。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值