0

それは私ですか、それともアイテムの高さ - e.ItemHeight - をリストボックスに一度だけ設定できますか?

ownerDrawing リストボックスで MeasureItemEvent を処理し、e.ItemHeight を適切な値に設定しましたが、設定された最初の高さだけが使用されます。

おっと、私はこれに慣れていません。申し訳ありません。これはコードです (DrawItemHandler はもちろん実際のプログラムにあります):

// Add eventhandler to draw and measure items
this.listBox1.DrawItem += new DrawItemEventHandler(this.DrawItemHandler);
this.listBox1.MeasureItem += new MeasureItemEventHandler(this.MeasureItemHandler);

// The eventhandler itself
private void MeasureItemHandler(object sender, MeasureItemEventArgs e)
{
    e.ItemHeight = Convert.ToInt32(mySettings.iCurrentSizeFactor * 10) + 1;
}
4

1 に答える 1

3

e.ItemHeightListBox.ItemHeightイベント発火で初期化されます。以前に設定した値は保存されません。一緒に変更するかListBox.ItemHeight、変数で変更を追跡する必要があります。


編集:(コメントに続く)

このイベントは、新しいアイテムが追加されたときに、そのアイテムに対してのみ発生します。を呼び出すと、すべてのアイテムに対しても発生しますListBox.Refresh()

コードを理解しているので、すべてのアイテムの ItemHeight を一度に増減する必要があります。

ListBox.Refresh--> TrackBar を更新するときに呼び出す必要があると思います。


編集2:

実際には、ListBoxが最初に作成されたとき、または項目が追加されたときにのみ発生するWM_MEASUREITEMを受け取ると、項目の高さが変更されます。初期化時に ListBox とそのすべての項目を作成した後はlistBox1_MeasureItem、更新による既存の項目の内部の変更は役に立ちません (Reflector の助けを借りて確認できます)。

WM_MEASUREITEMすべてのアイテムを削除および追加せずに、 a を ListBox に強制的に送信する方法を見つけました。

In place of ListBox.Refresh(), put:

ListBox.DrawMode = DrawMode.Normal;
ListBox.DrawMode = DrawMode.OwnerDrawVariable;
于 2009-09-14T10:42:01.357 に答える