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。如果不設定呢,則預設會顯示小數點兩位,進行四捨五入。