Visual Studio 2008 内のすべてのフォームとカスタム コントロールで設計時に問題が発生しています。前回のチェックインまで、すべてのコントロールが期待どおりにレンダリングされていました。現在のバージョンと以前の作業バージョンの唯一の主な違いは、コントロールのプロパティのUIText
名前が から に変更されContent
たことValue
です。その他の変更は、新しいフォームと 3 つの新しい列挙型を追加することですが、プログラム内のすべてのフォーム (新しいものを含む) に影響する明らかな変更はありません。
すべてのコントロール (すべてのフォーム) が、コントロールの名前を持つボックスとしてレンダリングされるようになりました (ただし、実行時にすべて正しくレンダリングされます)。
プロジェクトで新しいフォームを作成し、ラベルだけを付けた新しいカスタム コントロールを作成しようとしましたが、まったく同じ問題が発生します。
標準の .Net フォーム コントロールは正常に動作するため、これはカスタム コントロールのみの問題であることに注意してください。
リポジトリから以前のバージョンを復元すると、すべてが再び正しくレンダリングされ始めます。
この作業バージョンに戻って続行することもできますが、問題が再発した場合の修正方法を知りたいです。Visual Studios 2008 の問題 (ちなみに SP1) に比べて、プログラミングの問題であることを期待してここに投稿しています。
更新 - 問題を追跡しましたが、説明できません
問題を修正しました。まあ、固定というのは実際には適切な言葉ではありません。フォームが再び適切にレンダリングされるまで、すべてのユーザー コントロールを一度に 1 つずつ削除して、問題を特定しました。この問題は私の署名コントロールにありました (これは何年にもわたって存在していましたが、最新のチェックインでのみ、プロジェクトiVirtualDocket.CodeLibrary
への参照をメイン プロジェクトに追加しました。
iVirtualDocket
- References iVirtualDocket.UIControls
- References iVirtualDocket.CodeLibrary
iVirtualDocket.UIControls
-References iVirtualDocket.CodeLibrary
署名にはSignatureData
、これを行っていたと呼ばれるプロパティがあります。
public byte[] SignatureData
{
get
{
if (_signature == null)
{
return null;
}
else
{
return iVirtualDocket.CodeLibrary.Conversions.ImageToByteArray(
_signature, ImageFormat.Png);
}
}
}
ImageToByteArray は次のようになります。
public static byte[] ImageToByteArray(Image imageToConvert,
ImageFormat formatOfImage)
{
byte[] ret;
using (MemoryStream ms = new MemoryStream())
{
imageToConvert.Save(ms, formatOfImage);
ret = ms.ToArray();
}
return ret;
}
上記のメソッドをUIControls
プロジェクトに移動すると、すべて正常に動作します。ただし、メソッドをプロジェクトに戻しCodeLibrary
てそこで呼び出すとすぐに、すべてのフォームが UserControls のレンダリングを停止します。
したがって、次のことを行うと問題は解決しますが、その理由を知りたいです。
public byte[] SignatureData
{
get
{
if (_signature == null)
{
return null;
}
else
{
// Need to call this code directly here instead of through
// the CodeLibrary conversions, otherwise all user controls stop
// rendering in design mode
byte[] ret;
using (MemoryStream ms = new MemoryStream())
{
_signature.Save(ms, ImageFormat.Png);
ret = ms.ToArray();
}
return ret;
}
}
}
(さらに奇妙なのは、このプロパティをまだ使用していないことです。)