c#中ShowDialog的问题

来源:百度知道 编辑:UC知道 时间:2024/09/25 00:43:21
有一个窗体,上面的控件是自定义控件,然后使用ShowDialog将窗体显示出来,如何能让焦点放在自定义控件上?
ShowDialog显示出窗体后触发什么事件嘛?
两位说的和我的情况有些出入。
举例说明吧。
现在有2个窗口,A,B。
A中写了B的ShowDialog方法。
现在要完成的是,在B上,有一个自定义控件C,C中有一个textbox,在A调用B的ShowDialog方法是,显示出来的窗口的焦点在这个textbox上。如何才能让焦点在这个上面,这个是我的问题。
至于窗口间的焦点,可以采用记录父子关系来办到,那个已经实现了,但是控件的焦点还是得不到。
是控件不是窗口

再补充一下:
Form_Load事件我测试过,不能得到焦点,分析原因可能是因为这个是在ShowDialog时调用,这时页面还没有绘出来,所以也就不存在焦点问题,因此得不到焦点。TabIndex的方法我也试过了,由于自定义控件是动态加载的,有多少个不知道,谁是第一个也不知道,而焦点要在第一个的第一个TEXTBOX上面,因此不好设置TabIndex。

还有没有其他方法呢?

如何能让焦点放在自定义控件上?
TabIndex属性

ShowDialog显示出窗体后触发什么事件嘛
窗体的PageLoad事件
控件的 OnPaint事件

补充:
如果是TextBox就好办了啊,C控件设计里,对TabIndex属性做好排序.0、1、2...
然后你的B窗体里使用C控件时,将C控件的TabIndex设置为0, B窗体里的其他控件也要做好排序设置.1、2、3、4、5...
再弹出B的时候,焦点就在C控件的TextBox上。

触发离开事件,Validate事件等等,
ShowDialog会中断当前线程,并且,焦点移到Dialog上面.所以,当前如果使用
系统的ShowDialog方法,那么其父窗体将不能获取焦点.
-------
有两种方法可以实现,
1:
在B的load事件中将焦点放到C控键上.
2:
为B增加一个构造函数,参数为string,控件名称.
在这个构造函数中,根据参数寻找当前(B)Form中对应的控件,再调用该控件的Focus()方法既可.

你可以设置控件的TabIndex属性,在所有控件中TabIndex最小的就是就是焦点控件

在B窗体的Load事件上写textBox1.Focus();
就哦了

属于第二个窗体的Form_Load事件,用文本框的Focus()获得焦点。

Form1 f = new Form1();
f.ShowDialog();
textBox1.Focus();//焦点放到TextBox1上

触发Form_Load