2011-02-01 4 views
0

私は、私のウィンドウのフォームのいずれかでListViewにBackgroundImageを配置しました。WinForms:ListViewのBackgroundImageの配置

すべてが期待通りに機能します。しかし、今私はこの画像をListView内に配置したいと思います。

CSSのように:background-position: top right;画像を要素の右上隅に貼り付けますか?

Windowsフォームでこれを行う方法はありますか?

どうもありがとう:)

答えて

0

短い答えは:できません。

This blogなぜLVM_SETBKIMAGEとインターセプトWM_ERASEBKGROUNDが.NET ListViewで機能しないのですか。

この問題で見つけた解決策(ObjectListViewプロジェクトで使用されています)は、ネイティブのListViewコントロールの低レベルのカスタム描画機能を使用することです。実装するのは複雑でしたが、(今)簡単に使用できます。

enter image description here

0

私が知っている唯一の方法は、ListViewコントロールから継承し、OnPaintBackgroundのMethodeのをオーバーライドして、自分でGraphics.drawImageを()で画像を描画することです。しかし、あなた自身で位置を計算する必要があります;)System.Drawing.ContentAlignment型のアライメントにcostumプロパティを追加することもできます。

+1

OnPaintBackgroundは実行されず、描画はネイティブのWindowsコントロールによって行われます。 –

+0

オーケー私はOwnerDrawをtrueに設定することでうまくいくと思いました... – MBulli

2

それはそうはい、次のことができ、可能です。サイズ変更に置くか、どこか他のあなたは、リストビューサイズを変更していない場合

  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; 
0

は、そうでなければ、タイル画像が、それは文句を言わない一つの場所に貼り付けることができる(知らない、私は推測するいくつかの最適化を必要とします) 。

listView1.BackgroundImageTiled = true;