2019年4月6日 星期六

漂亮好用的UI套件,FREE

https://flawlessapp.io/designtools?fbclid=IwAR2JsSAJEAxAf9UNL2JY0ilPbzHsmhn0QvB3NVSdTYQGehuZyAN8AuVM9Kk

2018年6月10日 星期日

幾種常見但不容易分辨原因的 Exception




這個通常是宣告了 point變數,忘了產生實體。



有時要檢查某個Member,有時候要檢查引用的Class,提示訊息並不能告訴你錯在哪裡































2017年8月14日 星期一

RadGrid 的 ItemDataBound 事件使用簡介


每個觸發事件的帶入參數 GridItemEventArgs 都是一個 Row ,所以包含每個 Column先用 if 判斷是什麼 Item 觸發的,有可能是 Header 也可能是 Data之後透過轉型,就可以直接對該 Cell 進行操作

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
      if (e.Item is GridDataItem)
      {
           GridDataItem item = (GridDataItem)e.Item;
           string CategoryName = item["ColumnUniqueName"].Text;
           item["ColumnUniqueName"].Text = "";
           item["ColumnUniqueName"].ForeColor =  Color.Red;
           item["ColumnUniqueName"].Font.Bold = true;
      }
     else if (e.Item is GridHeaderItem)
     {
            GridHeaderItem header = (GridHeaderItem)e.Item;
            header.Height = Unit.Pixel(40);
      }
}

2015年10月23日 星期五

亂數的使用簡介

在C#中,要使用亂數產生器是非常容易的

他的建構子有兩種,一種是有參數的,一種是沒有參數的,沒有參數的就會拿時間來當作亂數種子來產生亂數,有參數的則會拿該數值跟種子來產生亂數。

所以如果在非常短的時間內,連續要產生器吐出亂數出來,就要注意種子的給法,不然就會出現一堆都是相同的亂數,因為即便你用了無參數的建構子,他用了「時間」來當參數,但是程式跑得太快,時間還沒有變動下,出來的亂數就會一樣了。

所以建議自己傳入參數,而且每次產生亂數產生器的時候,都給一個當下時間+不定變數,比方給loop的i加上時間的Millisecond或者更複雜等等。


Random RandNum = new Random();


Random RandNum = new Random( DateTime.Now.Millisecond + i );

2015年8月17日 星期一

OPC 協會所定義的 OPC Server and Client簡述

OPC DataAccess Server is comprised of several objects: the server, the group, and
the item The OPC server object maintains information about the server and serves as a container for OPC group objects. The OPC group object maintains information about itself and provides the
mechanism for containing and logically organizing OPC items.

Data can be read and written

Exception based connections can also be created between the client and the items in the group and can be enabled and disabled as needed.

There are two types of groups, public and local (or ‘private’).Public is for sharing across multiple
clients, local is local to a client

The OPC Items represent connections to data sources within the server

An OPC Item, from the custom interface perspective, is not accessible as an object by an OPC Client All access to OPC Items is via an OPC Group object that “contains” the OPC item

Note that the items are not the data sources - they are just connections to them.

For example, the tags in a DCS system exist regardless of whether an OPC client is currently accessing them. The OPC Item should be thought of as simply specifying the address of the data, not as the actual physical source of the data that the address references.

An OPC client application communicates to an OPC server through the specified custom and automation interfaces. OPC servers must implement the custom interface, and optionally may implement

the automation interface












2015年7月29日 星期三

try-catch -finally 之finally之特別用處

為什麼需要寫 finally那段

try
{

}
 catch (Exception e)

         
}
finally
{
       DoSomeClose();
}


如果寫成

try
{

}
 catch (Exception e)

         
}


DoSomeClose();

不也一樣嗎?我就是要在try catch之後去執行DoSomeClose();
事實上確實不同,finally確實有其特別之處

少了他,如果try或catch之中,有直接寫了return
那就不會執行DoSomeClose();

finally則會強制在你即便要return跳離開這段程式碼之前,也會先執行finally裡面的程式的



2015年7月15日 星期三

多國語言小數點符號處理

撰寫多國語系的軟體,必須注意到一些特殊處理事項
本篇所針對的數值呈現問題,將可能造成很嚴重的後果

首先,先明白數值表示法這件事情,在某些歐洲或美洲、東南亞地區數值的小數點符號,並不是「.」,而是「,」,所以當你的程式輸出檔案或者顯示在主控台的時候,會出現312.566被顯示成312,566 這種情形。如下圖的 fValue




這樣的狀況並不只是看起來怪怪的而已,更嚴重的是,如果你要下SQL指令,而且你的指令並不是透過SqlCommand物件的正規使用方式來進行,而是自己串出SQL指令的話,就會讓指令失敗,由於你的數值如果帶有小數點,會變成逗號,這會讓SQL指令被誤解析。

比方
sb.Append("INSERT INTO TB_RECORD_RAW VALUES (").Append(intIoId).Append(",").Append(douValue).Append(");”).
原本預期輸出
INSERT INTO TB_RECORD_RAW VALUES ( 123, 194.566 );
但結果會輸出
INSERT INTO TB_RECORD_RAW VALUES ( 123, 194,566 );
這會讓SQL誤判有三個參數要Insert,但是實際上只有兩個。結果要不就是填錯欄位,要不就會新增失敗(也許欄位不夠多)。


解決這個問題有兩種方式,要不就是透過SqlCommand物件的正規使用方式來進行。要不就是透過修改數值顯示方式(各國有各種特定的表示方式,可以在程式中強制統一),底下針對修改數值顯示方式來介紹。

CultureInfo TheCulture = new CultureInfo("en-US", false);
NumberFormatInfo NumFmtInf = TheCulture.NumberFormat;
NumFmtInf.NumberDecimalSeparator = ".";
NumFmtInf.NumberDecimalDigits = 10;

Double TestDot_ Double = 123.4567;
String Str_Result = String.Format(TheCulture, "{0:F}", TestDot_Double);

透過CultureInfo所建立的物件,會存放著作業系統的文化語言相關設定,指定為"en-US"是美國 “zh-TW則是台灣所有語言列表於http://www.csharp-examples.net/culture-names/


也可以客制化的修改小數點符號,也可指定浮點數一律顯示到小數點後第幾位,這邊稍微要注意的是,當你在此指定了小數點後第幾位,則不足位數會補零,比方123.4567000000。如果不設定呢,則預設會顯示小數點兩位,進行四捨五入。

2015年5月19日 星期二

ref 與 out 修飾詞的比較

1.方法參數宣告為ref與out時,在編譯時視為相同。(同樣的方法,用ref ,另外一個用out並不會被視為多型)
2.ref與out,都是將參數以ByRef方式傳遞。

3.ref參數在傳入方法之前,要先初始化完畢。

4.out參數在方法結束之前,要先初始化完畢。(當呼叫宣告為out參數的方法時,不管變數有沒有初始化,都可以傳入方法中執行,只要在方法結束前,方法內參數有初始化,就不會出現編譯錯誤。)

5.ref 不會強制要求函式內的程式,一定要修改傳入的參數,但 out 會。

2015年5月14日 星期四

C# 中如何將控制項陣列化

C# 如果要做到類似VB那種一大堆控制項陣列的方式來使用控制項
做法如下


先在Form視窗元件上面拉出要使用的控制項
假設要用4個元件,就拉4個出來
然後撰寫以下的程式碼(假設拉出來四個Label。名稱分別是label1 ~ label4)

Label[] Lbl_Shade = new Label[] { label1, label2, label3, label4 };

之後就可以如下的方式來使用


            Lbl_Shade[0].Text = "001";
            Lbl_Shade[1].Text = "002";
            Lbl_Shade[2].Text = "003";
            Lbl_Shade[3].Text = "004";

這樣比一個一個名稱來控制方便多了。

2015年2月8日 星期日

工業設計之跑步機UX

關於UI設計,雖然我也不是很專精
但是,以目前略懂略懂的情況來研究一下手邊的事物,總會有些體會的


來看看「公司的跑步機」



我動身體的時候,也來動動惱了
我們看看這樣的面板吧
第一個印象就是,好擁擠啊,不美觀啊
一堆按鈕也讓人覺得稍微會有恐懼的
加上一堆說明文字,這非常的不OK呀







再來看一個重點了,速度按鈕這邊有三個不好的設計

1.按鈕是沒有很好理解的圖示,這是鯊魚嗎?圓形按鈕上面有個圓角的三角形。簡單的圓形圖示,三角形指示方向就夠了

2.左邊表示提高,右邊表示降低,這裡其實也沒那麼不順,但是,一般提高會擺在右邊的。

3.光看圓形的部分,上升按鈕的圓形在底下,下降按鈕的圓形在上面,這點是蠻矛盾的,各位想像一下電梯的上升跟下降按鈕的位置,往上當然放在上的位置,如果往上放在下面的位置就違反了世俗的規範,容易造成使用者的困惑跟操作錯誤的










最後在看一下兩排速度按鈕跟高度按鈕,這樣的排列方式,說明文字又在奇怪的位置,再一排按鈕的正中間上方,又再調整速度跟高度按鈕的下方,設計的不是很好,還不如用個矩型把按鈕排列好,看起來比較整齊清爽些。


2014年12月30日 星期二

GIT版本控制

http://backlogtool.com/git-guide/tw/intro/intro1_1.html

圖文並茂,讓學習變得更簡單

2014年11月2日 星期日

電腦用語之兩岸與英文對照表



參考來源:兩岸技術用語對照表

英文台灣大陸
Advanced進階高級
Anti-Virus防毒軟體殺毒軟體
ARP CacheARP 快取記錄ARP 緩存表
ARP SpoofingARP 欺騙ARP 欺騙
Agent代理
Auto-summary自動歸納
Audit稽核審核
Active Directory活動目錄
Authentication Code驗證碼鑒別碼
Access Token存取權杖連接權杖
Add Hardware新增硬體添加硬件
Assignment指派賦值
Agility靈活敏捷
Buffer Overflow緩衝區溢位漏洞溢出
Bot殭屍電腦肉雞
Backspace倒退退格
Byte位元組字節
Bit位元
Built-in內建集成
Blog部落格博客
Blogger部落客博主 / 博客主
Big Data巨量資料海量資料
Blackhat SEO搜尋引擎毒化黑帽 SEO
Breath First Search橫向優先搜尋寬度優先遍歷
Binary二進制二元
Configuration設定設置 / 配置
Component元件組件
Chip晶片芯片
Clock Speed時脈速度時鐘速度
Compatible相容兼容
Computer電腦計算機
Connect連線連接
Control Panel控制台控制面板
Client用戶端客戶端
Command指令命令
Capture擷取補獲
Cross VLAN跨越式 VLAN
Class BB 類網路
Class A B C子網路等級主類網路
Cache Region快取區域緩存區域
Code Red紅色代碼
Create建立創建 / 新建
CA CertificateCA 憑證CA 證書
Command Prompt命令提示字元命令提示符
Crash當機宕機
Community社群社區
Cluster Sampling叢集抽樣聚類抽樣
Coverage涵蓋覆蓋
Cluster叢集集群
CPU ThrottlingCPU 調節
Data Frame資料幀
Digital Camera數位相機數碼相機
Default預設默認
Desktop桌面壁紙
Desktop Computer桌上型電腦台式計算機
Display Card顯示卡顯卡
Delivery傳遞交付
Device裝置設備
Domain Name網域名稱功能變數名稱
Deep Inspection深層檢測深度檢測
Drive Letter磁碟機代號驅動器符號
Data資料數據
Default預設默認 / 缺省
Digital數位數碼
Demo示範 / 展示演示
Domain Name網域名稱功能變數名稱
DDW (Detecting near-Duplicate WebPages)重複網頁刪除偵測網頁去重
Dimension次元維度
Enter回車
EIGRP路由器鄰居發現協定
Echo Request回應要求回顯請求
Echo Replay回應答覆回顯應答
Floppy軟碟軟盤
Font字型字體
Feedback意見反應回饋 / 反饋
Framework架構框架
Founder創始者奠基人
Field欄位
File Handle文件句柄
Group群組和組
Hard Disk硬碟硬盤
Hardware硬體硬件
Hostname主機名稱主機別名
Homepage首頁主頁
Header標頭包頭
Hash Algorithm雜湊演算法散列算法 / 哈希算法
Hijack劫持
[Hard Code]寫死硬編碼
Icon圖示圖標
Internet網際網路互聯網
IP AddressIP 位址IP 地址
Implementation實作實現
In-Band帶內管理
Inverted index反向索引倒排索引
Interpolation內插補點差值
Incoming/Inbound Link傳入連結入鏈
Instance執行個體實例
Intellisense智能感知
Joystick搖桿手柄
Kernel核心內核
LAN區域網路局域網
Link連結鏈接
Login/Logon登入登錄
Logout登出註銷
Loopback環回
Low-Latency低延遲時間低延時
Localhost本地主機
LM (Lan Manager)LAN 管理員LAN 管理器
Local Security Authority本機安全性授權安全子系統
Laser雷射激光
Linked list連結清單鏈表
Memory記憶體內存
Match比對匹配
Modeling模組化建模
[mì]n 的 m 次方n 的 m 次冪
Message Broker消息代理
Nimda妮姆達
New Technology File SystemNTFS 檔案系統NTFS 分區
Online線上在線
OSPF Cost路徑成本度量值
Out-Of-Band帶外管理
Outgoing/Outbound Link對外連結出鏈
Packet封包報文 / 包文
Password密碼口令
Permission權限許可權
Protocol協定協議
Packet Loss封包遺失數據包丟失
Promiscuous Mode混雜模式
Permission權限許可權
Patch更新檔補丁
PKI公開金鑰基礎建設公共金鑰結構
Process程序進程
Private Key私密金鑰私有金鑰
Printer印表機打印機
Programming程式設計編程
Posts文章帖子
Policy原則策略
[Poisson Process]卜瓦松過程泊松过程
[Paradigm]範式范式
Physical實體物理
[Probability]機率概率
Redundancy備援冗餘
Recovery Agent修復代理人恢復代理
Replay Attack重播攻擊重放攻擊
Registry機碼註冊表
Refresh重新整理刷新
Recycle Bin資源回收筒回收站
Robot Exclusion Protocol爬蟲禁抓協議
Rollback復原回滾
Return傳回返回
Scheduling排程調度
Submit送出提交
Three Way HandshakeTCP 三向交握TCP 三次握手
TCP SessionTCP 會話
TCP half-open Session_TCP 半開會話
TCP ConnectionTCP 連接
TCP InterceptTCP 攔截TCP 截取
Threshold門檻值閾值
Time Exceeded逾時超時
Traffic Shaping流量整形
Token Buket權仗桶
Training教育訓練培訓
Text Retrieval文字檢索文本檢索
Term-Document Matrix詞彙 - 文件矩陣單詞 - 文件矩陣
Traversal周遊遍歷
Unicast單點傳播單播
User使用者用戶
Uninstall解除安裝卸載
Unary一進制一元
Video視訊視頻
Weighted權重加權
Worm.Blaster疾風病毒衝擊波病毒
WordPad寫字板
Multicast多點傳播多播 / 組播
Market Shares市場佔有率市場份額
Media媒體介質
Messenger Service信差服務信使服務
Motherboard主機板主板 / 母板
Modem數據機調制解調器
Mouse滑鼠鼠標
My Document我的文件我的文檔
Master主要主控
[Metadata]中繼資料元數據
[microblog]微網誌微博
Native VLAN原生 VLAN本地 VLAN
Session State會話狀態
Subnet Mask子網路遮罩子網掩碼
Switchport mode accessAccess 模式接入模式
Support Tools支持工具資源包
Security Reference Monitor安全參考監督系統連接仲裁器
Simple Volume簡單磁碟區簡單卷
Spanned Volume跨距磁碟區跨區卷
Striped Volume等量磁碟區帶區卷
SAM (Security Account Manager)安全性帳戶管理員安全帳戶管理器
Submit送出提交
Screen螢幕屏幕
Support支援支持
SNMP Community StringSNMP 團體字符串
VLAN TrunkVLAN 幹道
VLAN TagVLAN 標記
VLAN Double TagVLAN 雙標記