4

長時間の操作中にカスタム フォームを使用してプログレス バーを表示する Windows フォーム アプリケーションがあります。このフォームは現在、プログラムの他のウィンドウと共にタスク バーに表示されるように設定されています。ただし、アプリケーションの他のウィンドウには適切なアプリケーション アイコンが表示されますが、このカスタム フォームにはデフォルトのアイコンしか表示されません。

タスクバーのデフォルトのアプリケーション アイコン

デザイナーのアイコンを、他のすべてのウィンドウで使用する同じアイコン ファイルに設定しましたが、この特定のフォームだけにこの問題があります。アイコンは、フォームのキャプションにも正しく表示されます。form.Icon = Resources.Sample_Icon;子フォームのコンストラクタまたは using ループで手動でアイコンを設定しても効果がないようです。

問題を再現するコード サンプルを次に示します。

// Inside Form1.cs on a button click
using (var form = new SampleForm())
{
    form.Show();

    for (int i = 0; i < numberOfIterations; ++i)
    {
        // Do work here in a real program

        // This function just calls progressbar.PerformStep():
        form.UpdateProgress();
    }
}

を に変更するShow()と正しいアイコンShowDialog() 表示されますが、この状況では DialogResult は実際には意味がありません。

処理されないWindowsタスクバーアイコンを設定するイベントまたはメッセージがあると思われますが、aform.Refresh()とaを入れたときApplication.DoEvents()(違いがあるかどうかを確認するためだけに)、デフォルトのアイコンがまだありました。

私は何が欠けていますか?また、ShowDialog が正しく機能するのはなぜですか?

私はC#4.0を使用しています。

4

1 に答える 1

1

ShoworShowDialogが呼び出されたとしても、フォームは親フォームからアイコンを継承しません。おそらく、他のフォームのアイコンを明示的に変更してみてください。現在のコードでそれを行う:

form.Icon = <your icon>;

または、他のフォームの読み込みコードでそれを行い、フォーム自体を参照してください。

于 2013-03-28T17:15:12.720 に答える