【问题标题】:Is there a way to keep Visual Studio from locking image files that you set at design time (ie, background images)?有没有办法阻止 Visual Studio 锁定您在设计时设置的图像文件(即背景图像)?
【发布时间】:2017-07-11 17:27:35
【问题描述】:

我已经在 VB.NET 中工作了大约一年(升级旧的 VB6 项目,呃),我的很多工作涉及在背景图像上放置控件以模拟 HMI(人机界面)。其中很大一部分是编辑表单的背景(以及其他图像控件)。我对 VS 的问题是,当我将图像设置为控件/表单时,VS 会锁定图像文件。当我需要调整我的图像时,在表格上测试后,我不得不重新启动 VS 以释放锁定并覆盖图像文件。

我在 Google 上搜索过,发现在 VS2005 中提到过类似的问题,所以这问题已经有一段时间了。我无法在 VS 中找到要更改的设置,并且互联网也确实没有太多帮助,所以我将在此处发布我的解决方案。

我希望这对某人有所帮助。

【问题讨论】:

    标签: .net vb.net winforms visual-studio design-time


    【解决方案1】:

    解决方案非常简单(就我而言),我从blog 得到了这个想法:

    即使在设计时 VS 在您加载控件/表单时也会执行一些表单/控件代码(例如,OnLoad, Paint 等),所以我创建了一个简单的 Image 属性覆盖来更改图像的加载方式.显然我有一个派生自Windows.Forms 的类可以使用:

    Public Class SGBase 
        Inherits System.Windows.Forms.Form 
        ' Irrelevent code...
        ' ...
        Public Overrides Property BackgroundImage As Image
            Get
                Return MyBase.BackgroundImage
            End Get
            Set(value As Image)
                If MyBase.BackgroundImage IsNot Nothing Then MyBase.BackgroundImage.Dispose()
                    MyBase.BackgroundImage = New Bitmap(value)
                End Using
            End Set
        End Property
    End Class
    

    根本问题是,当您将图像加载到表单/控件中时,VS IDE 会锁定文件并将其设置为 BackgroundImage 引用。我的解决方案利用Using 语句来防止文件锁定,并且我确保正确处理并创建一个新实例。每次刷新/更改表单时,VS 都会在设计时运行此代码。

    瞧!

    【讨论】:

    • 跳过Using bm As Bitmap = New Bitmap(value) 块。您永远不会在任何地方使用 bm 变量,因此创建另一个图像只是浪费资源。如果您想处理原始图像,只需执行以下操作:Using value(是的,就是这么短)。
    【解决方案2】:

    另一种简单的方法是在“选择资源”对话框中选择“项目资源文件”,而不是选择本地资源。这样 VS 在“资源”文件夹中创建文件的副本,您可以使用其他软件从该文件夹中打开它。以 Photoshop 为例。 使用此方法的另一个优点是您可以将所有必需的资源与您的项目源一起提供以供以后编辑。

    【讨论】:

    • 是的,那将是理想的。在我的具体情况下,图像随软件一起提供,并且必须可以即时编辑。每次加载表单时都会加载它们(升级 15yo VB6 项目很糟糕)。我仍然无法弄清楚为什么 VS 需要像那样锁定文件....
    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 2018-06-30
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    相关资源
    最近更新 更多