我一直在编写一个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
提前致谢!
答案 0 :(得分:1)
将表单类型更改为FixedDialog。如果问题仍然存在,请尝试将caller.Hide()
更改为caller.SetOpacity(0)
,将caller.Show()
更改为caller.SetOpacity(1)
每当您显示表单时强制刷新表单。