VB.NET-WinForms-防止用户控制';正在将s资源复制到表单';中国的本地资源

VB.NET-WinForms-防止用户控制';正在将s资源复制到表单';中国的本地资源,.net,vb.net,winforms,user-controls,.net,Vb.net,Winforms,User Controls,我有一个简单的windows窗体应用程序,其中有一个从PictureBox派生的名为“MyControl”的用户控件 在此MyControl中,我有以下代码: Sub New() MyBase.New() Me.BackgroundImage = My.Resources.MyImage 'This is a project resource image End Sub 现在,当我把这个MyControl拖放到表单中时,我得到了图像和那些东西。但问题是背景图像被复制到表单的本地.r

我有一个简单的windows窗体应用程序,其中有一个从PictureBox派生的名为“MyControl”的用户控件

在此MyControl中,我有以下代码:

Sub New()
   MyBase.New()
   Me.BackgroundImage = My.Resources.MyImage 'This is a project resource image
End Sub
现在,当我把这个MyControl拖放到表单中时,我得到了图像和那些东西。但问题是背景图像被复制到表单的本地.resx文件中。 因此,当我查看form.designer文件时,我发现以下内容:

Me.MyControl1.BackgroundImage = CType(resources.GetObject("MyControl1.BackgroundImage"), System.Drawing.Image)
这是一个问题,而且当我尝试更改控件中的图像时,它不会反映在窗体的控件实例中。所以这是一种痛苦


如何解决这个问题?我猜这将是一个反复试验的研究,但请提供帮助。

您必须从“MyControl”中删除背景图像,然后将该图像放入您创建的所有实例中


如果使用很多,默认控件的MyCube创建带有MyControl图像的后代,并将其作为默认控件的MyCube使用(您可以将其视为只读)。当需要另一个映像时,只需使用MyControl而不使用默认值。

能否从构造函数中删除
Me.BackgroundImage=My.Resources.MyImage
,并将其移动到覆盖的
OnLoad
控件的方法,然后重试拖动


实际上,我认为它不会有太大的改变,但这种方法在我看来更正确。

您必须告诉设计师,它不应该序列化BackgroundImage属性的值。您可以使用
属性执行此操作:

Imports System.ComponentModel

Public Class MyControl
  Inherits Control

  Public Sub New()
    Me.BackgroundImage = My.Resources.MyImage
  End Sub

  <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
  <Browsable(false)> _
  Public Overrides Property BackgroundImage() As System.Drawing.Image
    Get
      Return MyBase.BackgroundImage
    End Get
    Set(ByVal value As System.Drawing.Image)
      MyBase.BackgroundImage = value
    End Set
  End Property
End Class
导入System.ComponentModel
公共类MyControl
继承控制权
公共分新()
Me.BackgroundImage=My.Resources.MyImage
端接头
_
_
Public将属性BackgroundImage()替换为System.Drawing.Image
得到
返回MyBase.BackgroundImage
结束
设置(ByVal值为System.Drawing.Image)
MyBase.BackgroundImage=值
端集
端属性
末级

我还使用了
属性,用户更改图像不再有意义,因为更改将不再持久化。

我也遇到了同样的问题,不幸的是,我没有找到解决这个问题的方法(只是手动更正所有问题)。我想我对此有一些建议。我添加了一个usercontrol,并在其中添加了一个PictureBox。现在给出了UserControl中PictureBox的图像。将此UC放到表单上时,PictureBox的图像不会复制到表单的本地资源中。不知道为什么!您是否也可以将图像设置为控件中的嵌入资源?最后,也许可以让用户选择你的背景图像?@serhio,问题是即使我嵌入控件,它也会被复制。但是@nobugz给出了一个很好的解决方案。看看,我试过了。但是控件中没有OnLoad方法。我试图重写OnCreateControl()方法。但它仍然会复制到表单的resourceNice中,我因此诅咒.NET;)