如果我有用户控件,则在其中我覆盖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);
}
}
在设计模式下查看控件时,我能做些什么来显示它?
如果生成项目,控件应显示在窗体设计器的工具箱中。如果将其拖动到窗体中,它确实按预期显示为黑色。
据我所知,在控件本身的设计时不可能有这个。
如果启用了"模拟模式",则设计器上不会显示自定义用户控件。根据你的Visual Studio版本,设计器旁边会有一个按钮,或者"工具>选项"中有一个选项,你需要"启用项目代码"。
您所描述的那样,这是预期的行为。
必须先生成继承的控件,才能执行重写的 OnPaint()
方法。
构建后,它将出现在设计器工具箱中,可以在其中将其添加到窗体中。 设计器中的窗体承载生成的控件,该控件执行OnPaint()
,因此,即使您仍处于设计模式,黑色背景也可见。
说明这一点的一种快速方法是将Color.Black
更改为另一种颜色,看看会发生什么。 在您重新生成解决方案之前,它不会在设计器中更新!
我遇到了同样的问题,我真的认为能够在开发过程中只查看您的控件而不必将其添加到另一个表单中会很好。
我想我有一个解决方案!它很整洁,但我还没有使用它超过几分钟,可能会有一些缺点,所以让我知道!:)
只需在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
编辑:您需要构建项目以在设计器中显示新行为!