有許多方法可以傳值,包括Properties/Class/ini檔..等
這邊講兩個
1.Properties
使用時機: 需要儲存使用者設定時。
使用方法: 先到專案-> xxx屬性->設定,設定幾個需要使用的變數(型態要調好)
然後Form2內將變數代入Properties.Settings.Default.(設的變數名稱),
接著再去Form1內將Properties.Settings.Default.(設的變數名稱) 帶回form1(設一個新的變數去接)
記得要儲存使用者設定要加入Properties.Settings.Default.Save();
2.Class
使用時機: 滿廣泛的,但關掉無法儲存
使用方法: Form2內設一個public 變數
ex:
Public int a {get; set;}
public Form2{
....
}
回到Form1以後就可以用了,記得要寫在ShowDialog();的下方
Form2 frm2 = new Form2();
frm2.ShowDialog(this);
(寫在這邊)
當然要接值的話,型別也要對就是了。
End
2014年2月18日 星期二
2014年2月7日 星期五
[C#] Class小記 - 以 CRC 16為例
先看程式碼,如下
class CRC_16
{
public byte CRC_1 { get; set; }
public byte CRC_2 { get; set; }
public void CRC16_counter(byte[] data, int CRC_length) //跑兩個 1.送出去產生CRC(length = 6) 產生後 = 8
{ // 2.接收時驗證CRC(length = 83) 產生後 = 85
ushort CRCFull = 0xFFFF;
byte CRChigh = 0xFF, CRClow = 0xFF;
char CRC_LSB;
for (int i = 0; i < CRC_length; i++)
{
CRCFull = (ushort)(CRCFull ^ data[i]); //指令的第i組數字與CRCFull做XOR
for (int j = 0; j < 8; j++)//8bit,所以跑八次
{
CRC_LSB = (char)(CRCFull & 0x00000001);//取得最後一個位元的值
CRCFull = (ushort)((CRCFull >> 1) & 0x7FFF); //右移一位,第一位補0
//檢查
if (CRC_LSB == 0) //如果右移的值為0
{
//就把剛剛右移+第一位補零的數值存入暫存(不過已經做了,這邊只是註解)
}
if (CRC_LSB == 1) // 如果右移的值為1
{
CRCFull = (ushort)(CRCFull ^ 0xA001); //跟0xA001去做XOR,存入暫存器
}
}
}
//跑完要讓高低register對調
//CRChigh = (byte)((CRCFull >> 8) & 0xFF); //右移8Bit,也就是變成低位元,跟FF(1111 1111)做& 0還是0 1還是1
//CRClow = (byte)(CRCFull & 0xFF); //低的變成高的
CRChigh = (byte)(CRCFull >> 8); //右移8Bit,也就是變成低位元,跟FF(1111 1111)做& 0還是0 1還是1,不用&0xff也可
CRClow = (byte)CRCFull; //低的變成高的,不用&0xff也可
if (CRC_length == 6)
{
CRC_2 = CRChigh;//現在是低
CRC_1 = CRClow; //現在是高
}
if (CRC_length == 83)
{
CRC_2 = CRChigh;//現在是低
CRC_1 = CRClow; //現在是高
}
}
}
本例Protocol有兩種1.傳送(8byte)2.接收(85byte)
因此先用6byte 算出CRC(最後2byte) = 8 / 83byte 算出CRC(最後2byte) = 85,
用以驗證CRC-16是否正確。
Class部份假如要使用到CRC_1,CRC_2 則需要 這樣呼叫
1.先new好Class
CRC_16 CRC = new CRC_16();
2.存取Class內部資料
CRC.CRC_1 ,CRC.CRC_2
3.如果內部將CRC_1宣告成 public static .... ,則呼叫需改為
namespace名稱.Class名稱.CRC_1
class CRC_16
{
public byte CRC_1 { get; set; }
public byte CRC_2 { get; set; }
public void CRC16_counter(byte[] data, int CRC_length) //跑兩個 1.送出去產生CRC(length = 6) 產生後 = 8
{ // 2.接收時驗證CRC(length = 83) 產生後 = 85
ushort CRCFull = 0xFFFF;
byte CRChigh = 0xFF, CRClow = 0xFF;
char CRC_LSB;
for (int i = 0; i < CRC_length; i++)
{
CRCFull = (ushort)(CRCFull ^ data[i]); //指令的第i組數字與CRCFull做XOR
for (int j = 0; j < 8; j++)//8bit,所以跑八次
{
CRC_LSB = (char)(CRCFull & 0x00000001);//取得最後一個位元的值
CRCFull = (ushort)((CRCFull >> 1) & 0x7FFF); //右移一位,第一位補0
//檢查
if (CRC_LSB == 0) //如果右移的值為0
{
//就把剛剛右移+第一位補零的數值存入暫存(不過已經做了,這邊只是註解)
}
if (CRC_LSB == 1) // 如果右移的值為1
{
CRCFull = (ushort)(CRCFull ^ 0xA001); //跟0xA001去做XOR,存入暫存器
}
}
}
//跑完要讓高低register對調
//CRChigh = (byte)((CRCFull >> 8) & 0xFF); //右移8Bit,也就是變成低位元,跟FF(1111 1111)做& 0還是0 1還是1
//CRClow = (byte)(CRCFull & 0xFF); //低的變成高的
CRChigh = (byte)(CRCFull >> 8); //右移8Bit,也就是變成低位元,跟FF(1111 1111)做& 0還是0 1還是1,不用&0xff也可
CRClow = (byte)CRCFull; //低的變成高的,不用&0xff也可
if (CRC_length == 6)
{
CRC_2 = CRChigh;//現在是低
CRC_1 = CRClow; //現在是高
}
if (CRC_length == 83)
{
CRC_2 = CRChigh;//現在是低
CRC_1 = CRClow; //現在是高
}
}
}
本例Protocol有兩種1.傳送(8byte)2.接收(85byte)
因此先用6byte 算出CRC(最後2byte) = 8 / 83byte 算出CRC(最後2byte) = 85,
用以驗證CRC-16是否正確。
Class部份假如要使用到CRC_1,CRC_2 則需要 這樣呼叫
1.先new好Class
CRC_16 CRC = new CRC_16();
2.存取Class內部資料
CRC.CRC_1 ,CRC.CRC_2
3.如果內部將CRC_1宣告成 public static .... ,則呼叫需改為
namespace名稱.Class名稱.CRC_1
訂閱:
文章 (Atom)