-1

我一直在编写一个打开 Form1 的小应用程序,检查配置文件是否存在且正确,然后隐藏在任务栏中,直到收到 API 调用。

发生这种情况时,我希望在右下角打开一个新表单并显示各种详细信息,但我遇到了一些问题。当我使用 ShowDialog 打开表单时,表单并不总是遵循 TopMost 来尝试让表单出现在所有其他窗口的顶部,但是如果我使用 Show 代替,这会遵循 TopMost,但表单样式很混乱如下所示

标准形式如下:

Caller Number: XXXXXXXX
Caller Name:   XXXXXXXX
               XXXXXXXX

代码示例

Form2 form2 = new Form2();
form2.TopMost = true;
form2.TopLevel = true;
form2.ShowDialog();

上图:并不总是在所有内容之上打开

Form2 form2 = new Form2();
form2.TopMost = true;
form2.TopLevel = true;
form2.Show();

我当前的代码是:

private void checkCalls(object source, System.Timers.ElapsedEventArgs e)
{
    var client = new RestClient("http://apiurl.com");
    client.Authenticator = new HttpBasicAuthenticator(api_username, api_password);

    var request = new RestRequest("/", Method.GET);

    // async with deserialization
    var asyncHandle = client.ExecuteAsync<Call>(request, response =>
    {
        if (response.Data == null)
        {
            if (incoming_call == true && notify_type == "Pop-Up")
            {
                if (caller.InvokeRequired)
                {
                    caller.Invoke(new EventHandler(delegate {
                        Console.WriteLine("Hidden via Invoke");
                        caller.Hide();
                    }));
                }
                else
                {
                    Console.WriteLine("Hidden without Invoke");
                    caller.Hide();
                }
            }
            incoming_call = false;
        }
        else if(incoming_call == false)
        {
            incoming_call = true;
            if (notify_type == "Pop-Up")
            {
                //Console.WriteLine("Openning Window");
                if (caller.InvokeRequired)
                {
                    caller.Invoke(new EventHandler(delegate
                    {
                        Console.WriteLine("Opening Window via Invoke");
                        caller.Show();
                        caller.TopMost = true;
                        caller.TopLevel = true;
                    }));
                }
                else
                {
                    Console.WriteLine("Opening Window");
                    caller.Show();
                    caller.TopMost = true;
                    caller.TopLevel = true;
                }
            }
        }
    });
}

还有一些日志:

打开窗口
不调用就隐藏
打开窗口
不调用就隐藏

上面,打开像(很难看到,但文本框应该是灰色的,禁用和只读,每个文本字段旁边都有黑色文本,现在不可见,但有白色背景):

截图 http://img546.imageshack.us/img546/5517/screenshot20120708at222.png

提前致谢!

4

1 回答 1

1

将表单类型更改为 FixedDialog。如果问题仍然存在,请尝试更改您的caller.Hide()tocaller.SetOpacity(0)和您的caller.Show()tocaller.SetOpacity(1)

每当您显示表单时强制刷新表单。

于 2012-07-10T21:18:07.537 回答