6

.NET Windows フォーム アプリケーションは、テキスト ボックスやボタンなどの基本的なコントロールに同等のネイティブ Win32 コントロールを使用しますか? WPF はネイティブではありませんが、Windows フォームは非常にネイティブに見えます。Button コントロールのアニメーションは、Win32 ボタンとまったく同じように見えます。

4

1 に答える 1

9

はい、そうです…いくつかの例外があります。

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ても、あまり役に立ちません。

代わりに、これらのコントロールの元のバージョンであるMainMenuContextMenuをツールボックスに追加する必要があります。最近のバージョンの Visual Studio には既定で含まれていませんが、まだ完全に使用可能であり、どこにも行く予定はありません。繰り返しますが、代わりにこれらを使用することを強くお勧めします。これらはネイティブの Win32 メニューによって 100% バックアップされているため、ユーザーの Windows のバージョンに関係なく、本来あるべきように見えるからです。

于 2013-04-24T04:20:59.533 に答える