如何知道DLL中的对话框表单是否已启动并打开?

时间:2012-04-02 19:50:41

标签: c# winforms

在我们的可重用程序集中,我创建了一个静态类,以便可以在程序集的各个部分调用它,并访问另一个项目并调用其方法等...

public static class CommentViewerHelper
{
    static CommentViewerHelper()
    {
       CommentViewer = new CommentViewer();
    }

    /// <summary>
    /// Gives access to PCSCommentViewer public methods and properties.
    /// </summary>
    public static CommentViewer CommentViewer { get; private set; }
} 

此CommentViewer项目有一个表单,以便用户可以输入评论等... 我的问题是如何知道用户是否真的打开了这个CommentViewer程序?我的意思是,我可以随时调用它的方法但有一种方法首先我可以知道该程序是否开放?

3 个答案:

答案 0 :(得分:3)

要检查表单是否已打开,可以使用IsHandleCreated属性。

另一方面,如果您首先编写了启动另一个表单的代码,那么您不应该知道是否发生了这种情况吗?

答案 1 :(得分:2)

我相信你要完成的是即使被多次调用,也不会(重新)多次加载对话框的内容。你可以使用“延迟加载”来做到这一点。

创建字符串构建器引用并将其设置为null。在初始化中,如果引用为null,则创建字符串构建器对象并将内容加载到其中。如果它不为null,那么您知道已经检索了内容,您只需使用字符串构建器。

答案 2 :(得分:0)

如果您自己创建了表单,则查询AppDomain等应该没有问题。

如果您没有直接访问.NET应用程序信息的方法,可以尝试以下方法:

using System.Diagnostics;
private bool ApplicationExists(string appName)
{
    foreach (Process currentProcess in Process.GetProcesses("."))
    {
        if (currentProcess.MainWindowTitle.Length == appName)
        {
            return true;
        }
    }
    return false;
}