私は、私のウィンドウのフォームのいずれかでListViewにBackgroundImageを配置しました。WinForms:ListViewのBackgroundImageの配置
すべてが期待通りに機能します。しかし、今私はこの画像をListView内に配置したいと思います。
CSSのように:background-position: top right;
画像を要素の右上隅に貼り付けますか?
Windowsフォームでこれを行う方法はありますか?
どうもありがとう:)
私は、私のウィンドウのフォームのいずれかでListViewにBackgroundImageを配置しました。WinForms:ListViewのBackgroundImageの配置
すべてが期待通りに機能します。しかし、今私はこの画像をListView内に配置したいと思います。
CSSのように:background-position: top right;
画像を要素の右上隅に貼り付けますか?
Windowsフォームでこれを行う方法はありますか?
どうもありがとう:)
短い答えは:できません。
This blogなぜLVM_SETBKIMAGE
とインターセプトWM_ERASEBKGROUND
が.NET ListViewで機能しないのですか。
この問題で見つけた解決策(ObjectListViewプロジェクトで使用されています)は、ネイティブのListViewコントロールの低レベルのカスタム描画機能を使用することです。実装するのは複雑でしたが、(今)簡単に使用できます。
私が知っている唯一の方法は、ListViewコントロールから継承し、OnPaintBackgroundのMethodeのをオーバーライドして、自分でGraphics.drawImageを()で画像を描画することです。しかし、あなた自身で位置を計算する必要があります;)System.Drawing.ContentAlignment型のアライメントにcostumプロパティを追加することもできます。
それはそうはい、次のことができ、可能です。サイズ変更に置くか、どこか他のあなたは、リストビューサイズを変更していない場合
Bitmap bmp = new Bitmap(listView1.Width, listView1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
SolidBrush br1 = new SolidBrush(Color.White);
g.FillRectangle(br1, 0, 0, listView1.Width, listView1.Height);
g.DrawImage(Image, listView1.Width - Image.Width, listView1.Height - pictureBox1.Image.Height);
}
listView1.BackgroundImage = bmp;
は、そうでなければ、タイル画像が、それは文句を言わない一つの場所に貼り付けることができる(知らない、私は推測するいくつかの最適化を必要とします) 。
listView1.BackgroundImageTiled = true;
OnPaintBackgroundは実行されず、描画はネイティブのWindowsコントロールによって行われます。 –
オーケー私はOwnerDrawをtrueに設定することでうまくいくと思いました... – MBulli