私は、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
前もって感謝します!