-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()てくださいcaller.SetOpacity(0)caller.Show()caller.SetOpacity(1)

フォームを表示するたびに、フォームを強制的に更新してください。

于 2012-07-10T21:18:07.537 に答える