2017-01-23 10 views
0

私はVS2008でVB.Net winformsで書かれた仕事中のアプリケーションを持っています。これは最近VS2015に更新されました。しかし、いくつかの幻影の境界がUIに現れ始めました。ほとんどのコントロール/ UIはすべてカスタムコントロールですが、2015年に構築された後に現れている理由を知っている人がいるかもしれません。(2008年に同じコードをコンパイルしました。WinFormsファンタムボーダー

下のスクリーンショットは、実際の「幻影の境界線」を示しています。

UI Phantom Borders

参照することは困難かもしれないが、テキストの左側の薄い灰色の線は、「ファントム境界」です。この場合、これは大きな問題のようには見えませんが、UI全体では、他のすべてのコントロールが同じことをやっていると、かなり悪くなります。

私は新鮮なので、誰かがいくつかのアイデアを持っていることを望みます。

私は、コントロール内のすべての罫線を無効にして無効にすることを試みました(キャッシュ状態がないことを確認する)。ユーザーコントロールのすべてのプロパティを確認して、プロパティが不足していないことを確認します。

+0

私は少しばかりのところで外出し、アプリケーションをDPI Awareと宣言するように指示します。 VS2015で新しいWinformプロジェクトを開始します。プロジェクトメニュー - > ProjNameプロパティ - <アプリケーションタブ - >ウィンドウ設定の表示ボタンをクリックして、app.manifestファイルを開きます。 'dpiAware'タグが入っている' 'ブロックを古いアプリケーションにコピーしてください。 – TnTinMn

+0

@TnTinMn面白い考え!明日は明日見える。おおよそdpi認識の設定が入ってきたことをご存知ですか?私が最も奇妙だと分かったのは、もし私がそれを構築すれば、それはwin7とwin10だけでなく、10にもなるだろうということでした。それはかなり混乱する問題であることを認めなければなりません。 –

+0

DPIの認識はXPに移行する動いているターゲットでした。 [DPI対応デスクトップとWin32アプリケーションの作成](https://msdn.microsoft。com/ja-jp/library/dn469266(v = vs.85).aspx#high_dpi_tutorial)。最も可能性の高い原因はVistaで開始されたDPI仮想化ですが、問題が明らかになるようにモニターが変更されるまで数年かかりました。 – TnTinMn

答えて

0

標準。質問をしてから、答えが現れるようにしてください!

この問題は、基本ユーザーコントロールで "OnPaintBackground"メソッドがオーバーライドされていたために発生しました。

Windows 10/vs2015(その式のどの要素がわからないか)がピクセル計算の方法を変更したようです。

基本コントロールが背後にあるフォームの背景イメージを取得する場合、ユーザーコントロールの手動「透明度」を行うには、幅と高さが1ピクセル小さすぎます。 (それは幻の境界線を作成した)前

コード:

Dim srcRec As Rectangle = Bounds 
srcRec.Offset(backgroundSource.Origin) 
e.Graphics.DrawImage(backgroundSource.BackgroundImage, 0, 0, srcRec, GraphicsUnit.Pixel) 

あなたが見ることができるように、それはその背後に背景部分を取得し、独自のように、その画像を描画、その後、コントロールのサイズをつかみますバックグラウンド。

訂正コード(それは幻の境界を取り除く):

Dim srcRec As Rectangle = Bounds 
srcRec.Width +=1 
srcRec.Height +=1 
srcRec.Offset(backgroundSource.Origin) 
e.Graphics.DrawImage(backgroundSource.BackgroundImage, -1, -1, srcRec, GraphicsUnit.Pixel) 

これは、ファントムの境界線を隠し、正しくUIのレンダリング、問題を解決するようです。

この問題を少なくとも見た人にありがとう!私が共有できないコードベースから問題を要約するのは難しいです。うまくいけば、これは将来他の人を助けることができます。