邓诺(Dunno),如果我对此采取正确的方法?下面结构的内容在其他地方定义。当我运行代码时,它只是输出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);
}
如您所见,无论采用哪种格式格式化输出字符串,都将显示结构的数据。
您可以通过像这样投射项目来访问结构
Console.WriteLine( ((FT_DEVICE_wrapper) listBox1.Items[0]).INFO_NODE.Description );
或者,imo像这样更好一些:
FT_DEVICE_LIST_INFO_NODE node = ((FT_DEVICE_wrapper)listBox1.Items[0]).INFO_NODE;
Console.WriteLine(node.SerialNumber);
您可能需要考虑研究ListViews
,哪些支持列;在这里,添加结构的方法将大不相同,因为您希望将某些日期字段放入单独的列中。
如果要使用DataBinding,请先创建一个适当的List:
List<FT_DEVICE_wrapper> items = new List<FT_DEVICE_wrapper>();
然后更换
listBox1.Items.Add(W1);
经过
items.Add(W1);
listBox1.DataSource = items;
注意:只需ToString
在原始结构中添加一种方法,您就可以对结构进行冷处理,从而使结构在ListBox
没有包装的情况下显示良好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句