我目前有一个父控件 (Form1) 和一个子控件 (Form2)。
Form1 包含一个存储文件数据列表的 ListView (每个文件都是一个单独的项目)。
Form2 只包含一个文本框。
单击 Form1 中的其中一个 ListView 项目后,Form2 将打开并访问文件数据并将其以纯文本格式加载到 Form2 中的文本框中。
我遇到的问题是,我希望能够在单击 listviewitem 时检测到该文件是否已经以所述子窗体打开,如果是,则激活它(将其置于最前面)如果尚未打开,请打开它。我不确定这样做的最佳方法是什么,因为这可能涉及同时打开许多子表单。这不是 MDI 应用程序。任何关于如何实现这一点的想法都值得赞赏,样本更是如此。谢谢。
最佳答案
我过去所做的是给每个新表单一个唯一的标签(基于您在本例中查看的文件),因此:
var form = new Form2();
form.Tag = (object)"My Unique Object as a Tag"; // Redundant cast I know, but shows Tag is of type object
然后,当要为文件打开一个窗口时,遍历所有打开的表单检查标签,如下所示:
foreach(var f in Application.OpenForms)
{
if(f.Tag == tagForFile)
{
f.BringToFront();
return;
}
}
// Couldn't find one, so open on
var form = new Form2();
form.Tag = tagForFile;
form.Show();
而且这应该只为每个文件(或真正的标签)打开一个表单
希望对您有所帮助!
关于C# - 跟踪打开的子窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4567353/