我一直在编写一个打开 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
提前致谢!