gpt4 book ai didi

c# - 如何自定义 ToolStripTextBox 的呈现?

转载 作者:行者123 更新时间:2023-11-30 15:11:56 25 4
gpt4 key购买 nike

我非常喜欢 ToolStripProfessionalRenderer 样式,但我不喜欢它呈现 ToolStripTextBox 的方式。在这里,ToolStripSystemRenderer 在 IMO 方面做得更好。现在有没有一种方法可以结合两种渲染器的行为,对文本框使用系统样式,对其他所有内容使用专业样式?我已经成功地为按钮使用专业风格,为其余部分使用系统风格(通过派生这两个类)。但是 ToolStrip 中的文本框似乎不由渲染器处理。使用 .NET Reflector,这些文本框甚至似乎没有 Paint 事件处理程序,尽管它是由 ToolStrip.OnPaint 方法调用的。我想知道绘制这样一个文本框的代码在哪里,以及如何将其配置为像所有其他文本框一样绘制文本框。

最佳答案

如果您只需要系统渲染,最简单的方法是改用 ToolStripControlHost:

class ToolStripSystemTextBox : ToolStripControlHost{   public ToolStripSystemTextBox : base(new TextBox()) { }   [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]   [TypeConverter(typeof(ExpandableObjectConverter))]   public TextBox TextBox { get { return Control as TextBox; } }}

我在这里采取了简单的方法,将底层 TextBox 直接暴露给表单设计器,而不是委托(delegate)其所有属性。显然,如果需要,您可以编写所有属性委托(delegate)代码。

另一方面,如果有人想进行真正的自定义呈现,我会告诉您 ToolStripTextBox 的作用。它不是直接托管 TextBox,而是托管一个名为 ToolStripTextBoxControl 的私有(private)派生类。此类重写其 WndProc 以直接处理 WM_NCPAINT。然后它不会将实际绘图委托(delegate)给渲染器,而是检查渲染器的类型,然后分支到 ToolStripTextBoxControl 内部的不同渲染代码。它非常丑陋。

关于c# - 如何自定义 ToolStripTextBox 的呈现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1762185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com