C# - 跟踪打开的子窗体

标签 c# winforms

我目前有一个父控件 (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/

相关文章:

.net - 如何提高DataGridView的绘画性能?

c# - 在使用 Mono 运行的 C# 应用程序中更改当前 Linux 用户?

c# - 为什么默认情况下 AutoDetectChangesEnabled 不设置为 false?

c# - 一起使用任务和线程池可以吗?

c# - 多核机器上的多线程没有最大化 CPU

c# - 为什么我们需要连接字符串?

multithreading - C++/CLR 中的线程编程

c# - 如何用字符串替换 TextBox 中的选定文本?

c# - 如何正确显示重叠的用户控件?

c# - Datagridview 复选框列有死区