.NET Windows フォーム アプリケーションは、テキスト ボックスやボタンなどの基本的なコントロールに同等のネイティブ Win32 コントロールを使用しますか? WPF はネイティブではありませんが、Windows フォームは非常にネイティブに見えます。Button コントロールのアニメーションは、Win32 ボタンとまったく同じように見えます。
1 に答える
はい、そうです…いくつかの例外があります。
WinForms の一部はカスタム描画されています。これらはネイティブ コントロールを使用しますが、オーナー描画をオンにし、一部の描画ロジックを C# コードで内部的に処理します。これの利点は、ボタンのようなものBackColor
に、標準のシステム カラーの代わりにユーザー定義の色をサポートするプロパティを持たせることができることです。一般的に、これは (少なくとも私の意見では) 避けるべきです。なぜなら、効果が醜いだけでなく、おそらくユーザーが配色を選択した理由があるからです。しかし、グラフィック デザイナーは、ユーザーよりも自分の方がよく知っていると考えることが多いため、選択肢が存在します。
このように実装されたコントロールは、多くの場合FlatStyle
、描画方法を変更できるプロパティを公開します (たとえば、ButtonBase.FlatStyle
) 。を使用FlatStyle.Standard
すると、通常とは異なる設定でコントロールのプロパティをカスタマイズしていなくても、.NET Framework は通常の所有者の描画を行います。を使用FlatStyle.System
すると、オーナー描画やその他のオーバーライドなしで、コントロールが Win32 によって直接レンダリングされます。
ボタンの違いは簡単にわかります。に設定するFlatStyle.System
と、ボタンの青いホバー エフェクトが徐々にフェード インおよびフェード アウトします。に設定するFlatStyle.Standard
と、青い光が突然現れたり消えたりします。近いですが、まったく同じではありません。コンボ ボックスも同じことを行います (少なくともDropDownStyle
プロパティが に設定されている場合ComboBoxStyle.DropDownList
)。
FlatStyle.System
この FlatStyle でサポートされていない動作が絶対に必要でない限り、そのようなプロパティを持つすべてのコントロールを に設定することをお勧めします。
他にもいくつか例外があります。一部の WinForms コントロールは Win32 に存在しないため、ネイティブ コントロールによってサポートされていません。DataGridViewは、このようなコントロールの良い例です。
最後に、MenuStripおよびContextMenuStripコントロールはすべて C# コードで記述され、WinForms によって手動で描画されます。これらは、ネイティブの Win32 コントロールによってまったくサポートされていません。これが、Office XP スタイルの使用に永遠に行き詰まっているため、Windows Vista 以降で非常に見栄えが悪い理由です。Windows XP ではかっこよく見えましたが、それ以降のバージョンでは親指のように突き出ています。レンダリング スタイルを からProfessional
に変更しSystem
ても、あまり役に立ちません。
代わりに、これらのコントロールの元のバージョンであるMainMenuとContextMenuをツールボックスに追加する必要があります。最近のバージョンの Visual Studio には既定で含まれていませんが、まだ完全に使用可能であり、どこにも行く予定はありません。繰り返しますが、代わりにこれらを使用することを強くお勧めします。これらはネイティブの Win32 メニューによって 100% バックアップされているため、ユーザーの Windows のバージョンに関係なく、本来あるべきように見えるからです。