作者:
s4300026 (s4300026)
2018-02-01 10:34:05原文怒刪~~
我來提供第四點一點想法
程式碼:https://ideone.com/XnMPPo
舉例:
我有一個相機,但是雜訊很多,因此我使用了average的方法做平均
因此我要設定average的值
我要在GUI中text設定值,但是它是string類別,你知道的
因此我需要轉換程某個特定類別
但是這個特定類別會可能不一樣,舉例來說,可以是int, double, float, short...
每次都要做轉換,就要 Int32.Parse(), double.Parse()... 然後程式碼重寫一遍
這樣不是很麻煩嗎?
因此就寫了一個轉換器宣告如下:
Setter<想轉換的型態>
(來源TextBox, 取得目標物被設定後的值, 給予目標物欲設定的值,
報錯關鍵字, 設定後的狀態)
好處是該setter可以用在很多地方,像是:
如果是FPS,就會像
Setter<double>(
sender as TextBox,
new DoublePtrVoid(camera.FPS),
new VoidPtrDouble(camera.FPS),
"Fps",
cameraControlGUI.LabelFpsShow);
如果是拍照後的存檔路徑:
Setter<string>(
sender as TextBox, new
StringPtrVoid(camera.SavePicPath),
new VoidPtrString(camera.SavePicPath),
"SavePath",
cameraControlGUI.LabelSavePathShow);
如果是取像平均:
Setter<int>(
sender as TextBox,
new IntPtrVoid(camera.Average),
new VoidPtrInt(camera.Average),
"Average",
cameraControlGUI.LabelAvgShow);
那你會問:輸入格式不符怎麼辦?
1. 如果是使用者白目,應該給數字的給文字,那就會被轉換器擋下來,然後報錯
2. 如果是硬體限制呢? 像是一秒要拍個1000000000000000張照片?
阿你可以寫在camera.FPS()那個Get/Set方法裡面擋住他,然後報錯
這也是為什麼我會除了有輸入值的delegate方法,還要有輸出值的delegate
因為你不會知道設定有沒有成功啊!!!
3. 為什麼要有text的 "\r\n" ,因為我把他設定成多行,但只有你按下 "換行"
,我的程式才會鳥你,不然一律視為你 "正在輸入",尚未輸入完成。
一點建議,僅供參考
話說上班回屁話,會不會被開除阿 (抖抖抖)