使用 C# winforms,我想创建看起来像真实的自定义控件。
有很多类可以用来绘制看起来像真实的控件:ControlPaint
, VisualStyleRenderer
, ButtonRenderer
, CheckBoxRenderer
, ComboBoxRenderer
, GroupBoxRenderer
, ProgressBarRenderer
, RadioButtonRenderer
, ScrollBarRenderer
, TabRenderer
, TextBoxRenderer
, TextRenderer
, ToolStripProfessionalRenderer
, ToolStripRenderer
, ToolStripSystemRenderer
, TrackBarRenderer
.
考虑视觉风格时出现的问题:我想独立于视觉风格。含义:我不在乎用户是否允许视觉样式,我希望它能够工作。如果用户启用了视觉样式,我想使用视觉样式来绘制它,否则我想在没有视觉样式的情况下绘制它。
根据 MSDN 文档,唯一独立于视觉样式的类是ButtonRenderer
, CheckBoxRenderer
, GroupBoxRenderer
, RadioButtonRenderer
. 这意味着对于所有其他情况,我需要检查自己是否启用了视觉样式并使用不同的代码来绘制零件。
假设我想自己绘制一个 Tab 控件部件。TabRenderer
类具有所有需要的功能,但它仅在用户启用视觉样式时才有效。否则我需要使用ControlPaint
类来绘制,但它使用完全不同的模型,没有ControlPaint.DrawTab()
方法或类似的东西,我需要弄清楚我需要绘制哪些矩形类型,所以它看起来像一个真正的选项卡。这很烦人。
包括 Tab 控件在内的内置控件已经具有这种在有或没有视觉样式的情况下自行绘制的功能。为什么微软不向自定义控件创建者公开此功能?为什么自定义控件的创建者会受苦?