2017-07-11 2 views
1

私は約1年前からVB.NETで作業していました(古いVB6プロジェクトのアップグレード、ugh).HMI(Human-Machine Interface)をシミュレートするために背景画像にコントロールを配置する作業がたくさんあります。これの大きな部分は、フォームの背景を編集することです(他のImageコントロールも同様です)。 VSに関する私の問題は、画像をコントロール/フォームに設定すると、VSが画像ファイルをロックすることです。イメージを調整する必要があるときに、フォームにテストフィットを適用した後、VSを再起動してロックを解除し、イメージファイルを上書きする必要があります。Visual Studioがデザイン時に設定したイメージファイル(つまり、背景イメージ)をロックしないようにする方法はありますか?

私はGoogleを検索し、このような問題がVS2005で見つかったため、しばらくの間問題になっていました。私はVSで変更する設定を見つけることができませんでしたが、本当にインターネットからの多くの助けはありませんでしたので、ここで私の解決策を投稿します。

私はこれが誰かを助けることを願っています。

答えて

2

ソリューションは、(私の場合)かなり簡単だったと私は、このblogからアイデアを得た:あなたがコントロール/フォーム(すなわち、ロードするとVSは、フォーム/制御コードの一部を実行しても、設計時に

OnLoad, Paintなど)、Imageプロパティの単純なオーバーライドを作成して、イメージのロード方法を変更しました。

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参照に設定しますということです。もちろん私はで動作するようにWindows.Formsから派生したクラスを持っていました。私の解決策は、ファイルロックを防ぐためにUsingステートメントを利用しています。私は、適切に処分して新しいインスタンスを作成するようにしています。 VSは、フォームを更新/変更するたびにこのコードをデザイン時に実行します。

VOILA!

+2

「bmをビットマップとして使用=新しいビットマップ(値)」ブロックをスキップしてください。 'bm'変数はどこにも使わないので、別のイメージを作成するだけのリソースが無駄になります。元のイメージを破棄したい場合は、 'Use value'を実行してください(そうです、それは短いです)。 –

0

もう一つの簡単な方法は、ローカルリソースを選択するのではなく、 'リソースの選択'ダイアログで 'プロジェクトリソースファイル'を選択することです。この方法でVSは、 'Resources'フォルダにファイルの複製を作成し、そのフォルダから他のソフトウェアで開くことができます。例えば、Photoshop。 この方法を使用するもう1つの利点は、後で編集できるように、すべての必要なリソースをプロジェクトソースとともに発送できることです。

+0

はい、それは理想的でしょう。私の具体的なケースでは、画像はソフトウェアと共に出荷され、即座に編集可能でなければなりません。フォームがロードされるたびにロードされます(VB6プロジェクトのアップグレードは失敗します)。私はまだVSがそのようなファイルをロックする必要がある理由を理解できません.... –

関連する問題