更改要添加到listboxitem的自己的类基名

本文关键字:自己的 listboxitem 添加 | 更新日期: 2023-09-27 18:09:27

我有一个对象Audio,属性为"Title", "Artist"等等。我把它添加到ListboxItem和内容变成

{audio202738880_386844236}

这是截图

如何改变这个基数:{audio202738880_386844236}值我想要的(包括音频。Artist +"-"audio.Title)?

更改要添加到listboxitem的自己的类基名

您必须重写ToString()方法。此方法用于确定列表框中显示的内容。

public override string ToString()
{
    return "Whatever You can construct";
}

您可以从类中的属性构造返回值,以使对象具有合理的字符串表示。

如果它不是直接属于您的类,您可以创建自己的继承自Audio类的类,将覆盖放在那里,并在代码中使用新类。除了ToString()函数之外,它的行为完全相同。这只适用于Audio没有被标记为sealed的情况。

public class MyAudio : Audio
{
    public override string ToString()
    {
        return "Whatever You can construct";
    }
}

Moe Farag添加

如果已经有一个override的基类实现,你可能需要将ToString()标记为new。但是,您必须确保在使用ToString()方法时使用子类(在本例中为MyAudio),以便使用新的实现。
public class MyAudio : Audio
{
    public new string ToString()
    {
        return "Whatever You can construct";
    }
}

您有几种方法可以这样做。如果Audio是你的类,你应该重写ToString函数:

public override string ToString()
{
   return string.Format("{0}_{1}", Artist, Title);
}

如果没有,你使用WinForms -你应该实现函数drawwitem和重画ListBox自己。另外,不要忘记将属性DrawMode更改为值DrawMode.OwnerDrawFixed。它显示,listbox控件中的所有元素都是手动绘制的。

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
   // Draw the background of the ListBox control for each item.
   e.DrawBackground();
   // Draw the current item text
   var currentItem = listBox1.Items[e.Index] as Audio;
   var outputStr = string.Format("{0}_{1}", currentItem.Artist, currentItem.Title);
   e.Graphics.DrawString(outputStr, e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);
   // If the ListBox has focus, draw a focus rectangle around the selected item.
   e.DrawFocusRectangle();
}

实际上,如果你使用WPF -你有第三种变体。但问题是字段TitleArtist应该有访问器方法。如果你的课没有它,它就不起作用。首先你应该设置ItemsSource

listBox1.ItemsSource = YourList<Artist>();

下一步-使用ListBox的ItemTemplate属性:

<ListBox.ItemTemplate>
   <DataTemplate>
      <WrapPanel>
         <TextBlock Text="{Binding Path=Artist}" />
         <TextBlock Text="_" />
         <TextBlock Text="{Binding Path=Title}" />
      </WrapPanel>
   </DataTemplate>
</ListBox.ItemTemplate>

最后一个变体,如果您的字段没有访问器。一种方法是继承一个类并实现ToString,正如我所说的:

public class MyAudio : Audio
{
   public override string ToString()
   {
      return string.Format("{0}_{1}", Artist, Title);
   }
}