gpt4 book ai didi

c# - 如何在 C# Windows 窗体应用程序的列表框中显示结构的内容

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:29 29 4
gpt4 key购买 nike

不知道我的做法是否正确?以下结构的内容在别处定义。当我运行代码时,它只是输出一个包含 4 个零的列表。任何帮助将不胜感激.....

public class NativeMethods
{

public struct FT_DEVICE_LIST_INFO_NODE
{
public uint ID;
public uint LocId;
public string SerialNumber;
public string Description;
}

[DllImportAttribute(@"C:\Users\Brendan\Documents\libMPSSE.dll", EntryPoint = "SPI_GetNumChannels")]
public static extern uint SPI_GetChannelInfo(uint index, ref FT_DEVICE_LIST_INFO_NODE chanInfo);
}



public partial class Form1 : Form
{
List<uint> items = new List<uint>();

public Form1()
{

InitializeComponent();

NativeMethods.FT_DEVICE_LIST_INFO_NODE devlist = new NativeMethods.FT_DEVICE_LIST_INFO_NODE();

for(uint x=0;x<4;x++)
{

index = 0;
items.Add(NativeMethods.SPI_GetChannelInfo(index, ref devlist));

}
listBox.DataSource = items;
}
}

最佳答案

既然你写道你的结构是在别处定义的,我假设你不能改变它。

获得自定义显示字符串的通常方法是将您的结构包装在一个最小的类中,可能像这样:

class FT_DEVICE_wrapper
{
public FT_DEVICE_LIST_INFO_NODE INFO_NODE { get; set; }

public FT_DEVICE_wrapper(FT_DEVICE_LIST_INFO_NODE data_)
{ INFO_NODE = data_; }

public override string ToString()
{
return string.Format("ID = {0} LocID = {1} SNr = {2} ({3}) ",
INFO_NODE.ID, INFO_NODE.LocId, INFO_NODE.SerialNumber, INFO_NODE.Description);
}

}

现在您可以像这样添加包装器的实例:

private void button1_Click(object sender, EventArgs e)
{
FT_DEVICE_LIST_INFO_NODE N1 = new FT_DEVICE_LIST_INFO_NODE();
N1.ID = 1;
N1.LocId = 1001;
N1.SerialNumber = "123-456-00";
N1.Description = "test 01";
FT_DEVICE_wrapper W1 = new FT_DEVICE_wrapper(N1);

listBox1.Items.Add(W1);

}

如您所见,结构的数据以您设置输出字符串格式的任何方式显示。

并且您可以像这样通过转换 Items 来访问该结构

Console.WriteLine( ((FT_DEVICE_wrapper) listBox1.Items[0]).INFO_NODE.Description );

或者,我觉得这样更好一些:

FT_DEVICE_LIST_INFO_NODE node = ((FT_DEVICE_wrapper)listBox1.Items[0]).INFO_NODE;
Console.WriteLine(node.SerialNumber);

可能想考虑研究支持列的ListViews;这里添加结构的方式会完全不同,因为您可能希望将一些日期字段放入单独的列中。

如果你想使用数据绑定(bind),你首先要创建一个合适的列表:

List<FT_DEVICE_wrapper> items = new List<FT_DEVICE_wrapper>();

然后替换

listBox1.Items.Add(W1);

items.Add(W1);
listBox1.DataSource = items;

注意:通过简单地向原始结构添加一个 ToString 方法,您还可以使结构在 ListBox 中正常显示而无需被包装..

关于c# - 如何在 C# Windows 窗体应用程序的列表框中显示结构的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27103774/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com