我使用的是C#写Winform视窗程式
目前做的事情是把档案里的资料读出来
对应到form上的控件
譬如:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct Setting
{
public byte control;
public byte data1;
public byte data2;
}
control bit7 => Checkbox
control bit6, bit5 => shift变成0,1,2,3之后控制 Combobox
data1 => Textbox (十进制显示)
data2 => Textbox (十六进制显示)
档案读出来的东西,能够显示在控件上
然后控件如果被修改,也要能够写回档案
我目前用databind的方式来写,已经初步可以用
简单的程式如下:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct Setting
{
public byte control;
public byte data1;
public byte data2;
public bool IsEnable
{
get
{
return (control & 0x80) == 0 ? false : true
}
}
public int Option
{
get
{
return (control & 0x60) >> 5;
}
}
public int DecimalData
{
get
{
return data1;
}
}
public string HexData
{
get
{
return data2.ToString("X02");
}
}
void InitUi()
{
checkboxIsEnable.DataBindings.Add("checked", myobj, "IsEnable");
comboBoxOption.DataBindings.Add("SelectedIndex", myobj, "Option");
textBoxDecData.DataBindings.Add("Text", myobj, "DecimalData");
textBoxHexData.DataBindings.Add("Text", myobj, "HexData");
}
}
class MyForm : Form
{
void InitUi(byte[] rawData)
{
Setting myobj = Marshal.PtrToStructure(....);
checkboxIsEnable.DataBindings.Add("checked", myobj, "IsEnable");
comboBoxOption.DataBindings.Add("SelectedIndex", myobj, "Option");
textBoxDecData.DataBindings.Add("Text", myobj, "DecimalData");
textBoxHexData.DataBindings.Add("Text", myobj, "HexData");
}
}
但是目前我的资料有很多很多 (上千笔)
一笔一笔的加propert实在很累
而且我还没写set的部份...
想到输入的资料可能还需要换算与验证...(虚脱)
想问一下,有没有更聪明的方式
可以达成我的需求呢?谢谢