我对c#不是很有经验。我正在使用 winforms,我正在寻找一种方法来创建类似于此模板的元素列表,类似于 Visual Studio 的自动完成列表。有可能吗?我应该使用列表框还是列表视图?
编辑对不起,我的问题不清楚我不想创建自动完成,但我想要创建的是这样的东西列表,该东西的文本旁边有一个图标。
这是在 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);
}
}
正如我从您的问题中了解到的那样,您可以创建自定义UserControl
或创建一个Form
并放入ListBox
其中。如果您使用From
确保更改边框样式布局,只需将其设置为无。创建以供使用后,您应该创建表单并将其显示在您想要的位置,如下所示:
FrmAutoComplete x = new FrmAutoComplete();
x.Show();
您可以将此表单放入 ToolTipItem 并显示它。
祝你好运。