ええと、うーん、これは、いくつかの行のサイズを2行にする必要があることを意味します。上司は、表示されるテキストを幅に合わせて制限し、水平スクロールバーが気に入らないよりも、これがより簡単な解決策だと考えています> _ <
lst.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
lst.MeasureItem += lst_MeasureItem;
lst.DrawItem += lst_DrawItem;
private void lst_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = (int)e.Graphics.MeasureString(lst.Items[e.Index].ToString(), lst.Font, lst.Width).Height;
}
private void lst_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
e.Graphics.DrawString(lst.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
}
private void lst_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = (int)e.Graphics.MeasureString(lst.Items[e.Index].ToString(), lst.Font, lst.Width).Height;
}
private void lst_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
e.Graphics.DrawString(lst.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
}
データバインディング時に適切な表示メンバーを表示するには、
lst.Items[e.Index].ToString()
プロパティのキャストバージョンを使用します。したがって、バインディングソースがクラスオブジェクトCarの場合、次のようになります。
((Car)lst.Items[e.Index]).YourDisplayProperty
次に、上記の関数は文字列を適切に測定して描画できます。 :)
バインディングを正しくするには、必ずチェック「lst.Items.Count> 0」をlst_MeasureItem関数に追加してください。これが私の例です:
if (lst.Items.Count > 0)
{
e.ItemHeight = (int)e.Graphics.MeasureString(lst.Items[e.Index].ToString(), lst.Font, lst.Width).Height;
}
その後、他のすべてがうまく機能しているようです。