如果我有用户控件,我在其中覆盖OnPaint()以显示自定义图形。为什么在visual studio的设计模式中查看控件时不显示?
在设计模式下查看时,用户控件将显示为空。但是,如果将控件添加到在设计模式下查看的表单,它将显示为黑色。
public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(Color.Black);
base.OnPaint(e);
}
}
在设计模式下查看控件时,我能做些什么才能显示出来?
答案 0 :(得分:0)
如果构建项目,则控件应出现在表单设计器的工具箱中。如果将其拖动到表单,它会按预期显示为黑色。
据我所知,在控制本身的设计时间不可能有这个。
答案 1 :(得分:0)
如果您打开了“模拟模式”,则设计器上不会显示自定义用户控件。根据您的Visual Studio版本,设计器旁边会有一个按钮,或者工具>选项中有一个选项,您将需要“启用项目代码”。
答案 2 :(得分:0)
这是您所描述的行为。
必须首先构建您继承的控件才能执行重写的com.facebook.orca
方法。
构建后,它将显示在Designer工具箱中,可以将其添加到表单中。设计器中的表单承载构建的控件,该控件执行OnPaint()
,因此即使您仍处于设计模式,黑色背景也可见。
快速说明这一点的方法是将OnPaint()
更改为另一种颜色,看看会发生什么。在重建解决方案之前,它不会在Designer中更新!
答案 3 :(得分:0)
我遇到了同样的问题,我真的认为能够在开发过程中仅查看您的控件而不必将其添加到其他表单中会很好。
我想我有一个解决方案! 这很整洁,但是几分钟之后我还没有使用它,可能会有一些缺点,所以让我知道! :)
只需在您的UserControl代码顶部添加一个Mockup类,如下所示:
internal class MyUserControlDesigner : MyUserControl
{
}
public partial class MyUserControl : UserControl
{
public MyUserControl()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(Color.Black);
base.OnPaint(e);
}
}
通过使其内部化,它不会在工具箱中弹出,如果切换到“视图设计器”,它将显示文件中的第一类!太..对我来说很好!
如果在设计器中调整其大小或更改任何属性,这将使用仅在设计器中运行的InitializeComponent代码更新MyUserControlDesigner类,这是测试控件的完美之选!
希望这是您4年前寻找的东西! :D
编辑:您需要构建项目以使新行为在设计器中显示!