【发布时间】:2019-02-11 20:14:57
【问题描述】:
我有一个扩展RichTextBox:
public class RichTextBoxEx : RichTextBox
{
protected override void OnCreateControl()
{
Text = "Hello World";
base.OnCreateControl();
}
}
当我使用BorderStyle = BorderStyle.None;删除边框时,该方法被调用了两次:
protected override void OnCreateControl()
{
BorderStyle = BorderStyle.None;
Text = "Hello World";
base.OnCreateControl();
}
为什么会这样?
【问题讨论】:
-
WinForms 就是这样,尤其是在控件创建到一半的时候。 WinForms 允许您在窗口创建时间之前和之后使用幕后魔法设置控件的样式(许多 样式 只能在 Win32 中创建控件时正确应用 - WinForms 将拆除并重新创建一个窗口(如果需要)完成此操作)如果此行为妨碍,请使用静态布尔值来防止长时间执行的代码运行两次,否则,您不必编写 Win32 代码您可以从 Windows 窗体中免费获得。
-
或者...尝试在
OnCreateControl之前设置样式。这样,控件将按照您想要的样式创建,而无需创建、拆卸和重新创建控件 -
@Flydog57 - 当我编辑
Margin属性时,它工作得很好。那么Margin和BorderStyle有什么区别呢? -
如果你是直接在windows下编程(使用win32和朋友(这个其实是user32)),windows(winforms控件通常是windows)有属性、样式和扩展样式。创建窗口时设置样式和扩展样式。可以随时设置属性(如“文本”、“前景色”等)。如果实际窗口已创建(Windows.Forms.Control 实例具有与之关联的句柄)并且您更改了样式或扩展样式,Windows 窗体会破坏现有控件并在其位置重新创建一个控件。呃 - 只是因为。
-
这里有一些解释:blogs.msdn.microsoft.com/jfoscoding/2004/11/24/…。寻找“重新创建”
标签: c# .net winforms richtextbox windows-forms-designer