Show vs ShowDialog与两者都有问题

时间:2012-07-08 21:31:27

标签: c# winforms

我一直在编写一个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;
                }
            }
        }
    });
}

还有一些日志:

Opening Window
Hidden without Invoke
Opening Window
Hidden without Invoke

上面,打开就像(很难看到,但文本框应该显示为已禁用和只读,并且每个文本字段旁边都有黑色文本,现在看不见,但有白色背景):

screenshot http://img546.imageshack.us/img546/5517/screenshot20120708at222.png

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

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