我有一个包含子窗体对象的面板的应用程序。当我点击其中一个表格时,它会带到前面。我想知道现在哪一个在前面...... 我查看了事件列表,但无法找到适合我的目的事件:(
这些方法不起作用:
protected void OpenedFileForm_Enter(object sender, EventArgs e)
{
MessageBox.Show("enter");
}
protected void OpenedFileForm_Click(object sender, EventArgs e)
{
MessageBox.Show("click");
}
protected void OpenedFileForm_Activated(object sender, EventArgs e)
{
MessageBox.Show("activated");
}
protected void OpenedFileForm_MouseClick(object sender, MouseEventArgs e)
{
MessageBox.Show("mouse click");
}
protected void OpenedFileForm_Shown(object sender, EventArgs e)
{
MessageBox.Show("shown");
}
OpenFileDialog openFile1 = new OpenFileDialog();
openFile1.DefaultExt = "*.txt";
openFile1.Filter = "TXT Files|*.txt|RTF Files|*.rtf";
if (openFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
openFile1.FileName.Length > 0)
{
switch (Path.GetExtension(openFile1.FileName))
{
case ".txt":
txtForm childTXT = new txtForm();
this.childForms.Add(childTXT);
childTXT.Parent = this.mainPanel;
childTXT.richTextBox1.LoadFile(openFile1.FileName, RichTextBoxStreamType.PlainText);
childTXT.Show();
break;
}
}
答案 0 :(得分:1)
您是否尝试过Form.Activated
活动?
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.activated(v=vs.80).aspx
编辑:
如果您使用的是MDI应用程序,则可能需要使用MdiChildActivate
。
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.mdichildactivate.aspx
答案 1 :(得分:1)
此代码仅在将Form.TopLevel属性设置为false时才有效。这使它变成了一个子控件,几乎与UserControl无法区分。
这有很多副作用,因为没有“前面”的概念了。子控件的Z顺序由它们在父控件集合中的位置决定。它会影响它发射的事件,激活和停用永远不会发射。此外,Form类被设计为一个容器控件,它不喜欢把焦点本身。它的子控件获得焦点,Form类没有任何焦点用途。这就是Enter,Click和MouseClick事件不会触发的原因,它们是需要关注的事件。
长话短说,你要做的事情并不能完全成为一种感觉。如果它是严格要修复的Z顺序,那么为MouseDown事件编写一个事件处理程序:
void OpenedFileForm_MouseDown(object sender, MouseEventArgs e) {
var frm = (Form)sender;
frm.BringToFront();
}
您可以添加frm.Select()以获取要触发的Enter事件,但仅在表单不包含任何可聚焦控件本身时才执行此操作。请注意,有证据表明您未在代码中正确分配事件。已显示的事件会触发。将FormBorderStyle设置为None也很重要,标题栏不能再指示激活状态。
答案 2 :(得分:0)
好的,我知道了!谢谢大家帮忙。你给了我一个暗示,考虑我的奇怪的MDI想法的公平性,其中Panel是其他表格的父级。我删除了包含Panel的SplitContainer,只做了标准的MDI应用程序,其中Forms是主Form的MDIChildren。 childTXT.MdiParent = this;