Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 显示与显示对话框问题_C#_Winforms - Fatal编程技术网

C# 显示与显示对话框问题

C# 显示与显示对话框问题,c#,winforms,C#,Winforms,我一直在编写一个小应用程序,其中Form1打开,检查配置文件是否存在且正确,然后隐藏在任务栏中,直到收到API调用 当这种情况发生时,我希望在右下角打开一个新表单,并显示各种细节,但我有一些问题。当我使用ShowDialog打开表单时,表单并不总是以最上面的窗口为准,以尝试将表单显示在所有其他窗口的顶部,但是如果我使用Show,则以最上面的窗口为准,但是表单样式混乱,如下所示 标准表单如下所示: Caller Number: XXXXXXXX Caller Name: XXXXXXXX

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

当这种情况发生时,我希望在右下角打开一个新表单,并显示各种细节,但我有一些问题。当我使用ShowDialog打开表单时,表单并不总是以最上面的窗口为准,以尝试将表单显示在所有其他窗口的顶部,但是如果我使用Show,则以最上面的窗口为准,但是表单样式混乱,如下所示

标准表单如下所示:

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;
                }
            }
        }
    });
}
private void checkCalls(对象源,System.Timers.ElapsedEventArgs e)
{
var client=新的RestClient(“http://apiurl.com");
client.Authenticator=新的HttpBasicAuthenticator(api\u用户名、api\u密码);
var request=new RestRequest(“/”,Method.GET);
//异步与反序列化
var asynchHandle=client.ExecuteAsync(请求、响应=>
{
if(response.Data==null)
{
if(传入的\u呼叫==true&¬ify\u类型==“弹出”)
{
if(调用者。调用者要求)
{
调用(新事件处理程序(委托{
Console.WriteLine(“通过调用隐藏”);
caller.Hide();
}));
}
其他的
{
Console.WriteLine(“隐藏而不调用”);
caller.Hide();
}
}
传入呼叫=假;
}
else if(传入的_调用==false)
{
传入呼叫=真;
如果(通知类型==“弹出”)
{
//控制台写入线(“打开窗口”);
if(调用者。调用者要求)
{
调用(新事件处理程序(委托
{
Console.WriteLine(“通过调用打开窗口”);
caller.Show();
caller.topmest=true;
caller.TopLevel=true;
}));
}
其他的
{
控制台写入线(“打开窗口”);
caller.Show();
caller.topmest=true;
caller.TopLevel=true;
}
}
}
});
}
还有一些日志:

Opening Window Hidden without Invoke Opening Window Hidden without Invoke 开窗 隐藏而不调用 开窗 隐藏而不调用 如上所示,打开方式如下(很难看到,但文本框应灰显为禁用和只读,每个文本字段旁边都有黑色文本,现在不可见,但背景为白色):


提前谢谢

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


无论何时显示表单,都要强制刷新表单。

如果您的问题不清楚,请进一步充实。你解释了发生了什么,但没有解释为什么不正确。“正在发生的事情与您期望发生的事情相比。@SergioTapia抱歉,希望我刚才所做的编辑能对您有所帮助。您是如何在代码中隐藏表单的?我有一个问题!”!textBox3是做什么的?:)如果删除TopLevel=true会发生什么?你搞定了!看着你一个接一个的尝试过的一切。最后,我看到了“在每个Set.Opacity之后强制刷新控件”,并意识到我需要调用caller.refresh();显示表单并设置最顶层/顶层后!