カスタマイズされた CheckedListBox クラスに問題があります。OnDrawItem をオーバーライドしてカスタム ComboBox クラスを使用するコードを取得しました (画像を含めるため)。私の目標は、アイテムがカスタム ComboBox の代わりに CheckedListBox クラスに表示されるように外観を変更することです (写真を含めるためにオーバーライドも使用)。問題は、写真が正しく表示されないことです。アイテムをクリックしてマウスを押したままにするか、リストボックスをスクロールするまで、写真はまったく表示されません...また、コードでチェックを外した後でも、チェックされたアイテムはチェックされたままになりますランタイム (視覚的にのみ、論理的には問題ありません)。何が起こっているのか分かりますか?
public class CategoryCheckBoxListImagified : System.Windows.Forms.CheckedListBox
{
// other stuff....
// ...
protected override void OnDrawItem(DrawItemEventArgs e)
{
if (this.Items.Count == 0) return;
if (DisplayMode == DisplayModeEnum.TextOnly || DisplayMode == DisplayModeEnum.TextAndImages)
base.OnDrawItem(e);
Category category = (Category)this.Items[e.Index];
if (DisplayMode == DisplayModeEnum.ImagesOnly || DisplayMode == DisplayModeEnum.TextAndImages)
{
string imagePath = Path.Combine(IMAGE_FOLDER, category.ImageName ?? "");
Image image = null;
if (File.Exists(imagePath))
{
image = Bitmap.FromFile(imagePath);
}
else
{
imagePath = Path.Combine(IMAGE_FOLDER, IMAGE_NO_IMAGE);
image = Bitmap.FromFile(imagePath);
}
// e.Bounds contain the area for the whole item. Text is 16 pixels high.
Rectangle drawImage = new Rectangle(20, e.Bounds.Top + 12, 64, 64);
e.Graphics.DrawImage(image, drawImage);
}
}
}