-1

我对c#不是很有经验。我正在使用 winforms,我正在寻找一种方法来创建类似于此模板的元素列表,类似于 Visual Studio 的自动完成列表。有可能吗?我应该使用列表框还是列表视图?

编辑对不起,我的问题不清楚我不想创建自动完成,但我想要创建的是这样东西列表,该东西的文本旁边有一个图标。

4

2 回答 2

0

这是在 Listview 控件中使用图像的快速而肮脏的示例。由于我没有太多关于你打算做什么的信息,所以我尽量保持简单。

简而言之,您需要将一些图像加载到 Listview 控件中内置的 ImageList(Large 或 Small)之一并为其分配键,以便您可以在添加它们时将它们分配给特定的列表项。

诀窍是确定用于特定列表项的图像(假设有不同的图像分配给不同的列表项,具体取决于某些差异化因素。在此示例中,我使用了“汽车”或“卡车”的任意分配并简单地决定列表中的前五个项目是汽车,最后五个是卡车。然后,我在添加每个列表视图项目时使用 image 键适当地分配了每个图像。您可以为更复杂的场景执行此操作,并且使用图像键时,添加项目的顺序无关紧要。

对于此用例,您需要创建或使用尺寸为 16 x 16 像素的图像。我继续在我的项目资源文件中添加了两个图像,然后使用项目Properties.Resources名称空间简单地访问它们。还有其他方法可以做到这一点,但这对我来说是最方便的。

希望有帮助。

public partial class Form1 : Form
{
    static string CAR_IMAGE_KEY = "Car";
    static string TRUCK_IMAGE_KEY = "Truck";

    public Form1()
    {
        InitializeComponent();
    }


    private void Form1_Load(object sender, EventArgs e)
    {
        this.SetupListview();
        this.LoadListView();
    }


    private void SetupListview()
    {
        var imgList = new ImageList();
        imgList.Images.Add("Car", Properties.Resources.jpgCarImage);
        imgList.Images.Add("Truck", Properties.Resources.jpgTruckImage);

        var lv = this.listView1;
        lv.View = View.List;
        lv.SmallImageList = imgList;            
    }


    private void LoadListView()
    {
        for(int i = 1; i <= 10; i++)
        {
            string currentImageKey = CAR_IMAGE_KEY;
            if(i > 5) currentImageKey = TRUCK_IMAGE_KEY;
            var item = this.listView1.Items.Add("Item" + i.ToString(), currentImageKey);
        }
    }
于 2012-12-29T16:55:59.693 回答
0

正如我从您的问题中了解到的那样,您可以创建自定义UserControl或创建一个Form并放入ListBox其中。如果您使用From确保更改边框样式布局,只需将其设置为无。创建以供使用后,您应该创建表单并将其显示在您想要的位置,如下所示:

FrmAutoComplete x = new FrmAutoComplete();
x.Show();

您可以将此表单放入 ToolTipItem 并显示它。

祝你好运。

于 2012-12-29T15:17:05.613 回答