有需求或技術問題可以隨時跟我連絡 (MSN上線時)

2009年8月17日 星期一

Indexer(索引器) in C#

透過索引器機制,能夠讓你像陣列一樣的爲物件編寫索引值,這是屬性提供的一個有效率的方式來管理類別的實體資料,看以下範例

(1)建立Telephone Class

public class Telephnoe
{
    private string[] _telephone = new string[3];

    public string this[int index]
    {
        get
        {
            if(index >=0 || index < _telephone.Length)
             {
                 return _telephone[index];
             }
             return string.Empty;
         }
         set
         {
             if (index >= 0 || index < _telephone.Length)
             {
                 _telephone[index] = value;
             }
         }
     }
}

 

(2)建立Person Class

public class Person  
{  
      public string Name { get; set; }  
      public Telephone Telephones = new Telephone();  
}

使用範例:

// 宣告 Person 類別物件變數 Person  
Person myPerson = new Person();  
// 設定一般 Name 屬性,無法帶入參數  
person.Name = "王小明";  
// 設定可代入參數的 Telephones 屬性  
person.Telephones[0] = "07-3333333";  
person.Telephones[1] = "0960666333";  
// 讀取一般性 Name 屬性 
Console.WriteLine(person.Name); 
// 設定可代入參數的 Telephones 屬性 
Console.WriteLine(person.Telephones[0]); 
Console.WriteLine(person.Telephones[1]);

輸出結果:

王小明  
電話:07-3333333 
電話:0960666333



網站可下載檔案開始提供MD5檢查碼

爾後網站中可以下載的檔案,我都會提供MD5 Code,提供網友自行檢查檔案的正確性

提供一份保障...

2009-8-17 上午 11-42-29



2009年8月16日 星期日

MP3 Tag 修改程式

想必各位一定都有聽MP3的習慣,但是有時候MP3 Player所顯示的資訊是錯誤的,或者是亂碼,怎麼辦???

這時候你就會需要MP3 Tag修改軟體.

MP3的 TAG大概是這樣組成的

MP3 TagBody (檔案的最後128 Bytes為TAG) 編碼方式 :
(0—2)      3 bytes ==> "TAG"三個字,如果不是"TAG",則為MPEG File
(3—32)     30 bytes ==> 標題 (Title)
(33—62)   30 bytes ==> 演唱/奏者,藝術家 (Artist)
(63—92)   30 bytes ==> 專輯名稱 (Album)
(93—96)   4bytes   ==> 發行年份 (PubYear)
(97—126) 30 bytes ==> 註釋/附加/備註信息 (Comment)
(127)       1 byte  ==> 音樂型態 (Music Type)

ID3v1 ID3v11

根據上面的編碼原則,寫的一個Parser Class

2009-8-16 下午 09-27-45

MP3TagParser Class

 

應用程式畫面

2009-8-16 下午 09-28-46

Source Code



Int / String to Enum in C#

enum myEnum {…………}

From a string:

myEnum foo = (myEnum)Enum.Parse(typeof(myEnum), yourString);

From an int:

myEnum foo = (myEnum)yourInt;


2009年8月12日 星期三

簡體中文 繁體中文 轉換

UI Layout如下圖所示:


重要的Using:
using System.Runtime.InteropServices;

重要程式碼:
namespace 簡繁中文轉換
{
public partial class Form1 : Form
{
internal const int LOCALE_SYSTEM_DEFAULT = 0x0800;
internal const int LCMAP_SIMPLIFIED_CHINESE = 0x02000000;
internal const int LCMAP_TRADITIONAL_CHINESE = 0x04000000;

//Import WIN32API:LCMapString
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern int LCMapString(int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, [Out] string lpDestStr, int cchDest);


public Form1()
{
InitializeComponent();
}

private void button_Translate_Click(object sender, EventArgs e)
{
if (textBox_TC.Text != string.Empty)
{
textBox_SC.Text = ToSimplified(textBox_TC.Text);
}
else if (textBox_SC.Text != string.Empty)
{
textBox_TC.Text = ToTraditional(textBox_SC.Text);
}
}
///
/// 繁體轉簡體
///

/// 要轉換的繁體字:體
/// 轉換後的簡體字:体
public static string ToSimplified(string pSource)
{
String tTarget = new String(' ', pSource.Length);
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_SIMPLIFIED_CHINESE, pSource, pSource.Length, tTarget, pSource.Length);
return tTarget;
}

/**////
/// 簡體轉繁體
///

/// 要轉換的繁體字:体
/// 轉換後的簡體字:體
public static string ToTraditional(string pSource)
{
String tTarget = new String(' ', pSource.Length);
int tReturn = LCMapString(LOCALE_SYSTEM_DEFAULT, LCMAP_TRADITIONAL_CHINESE, pSource, pSource.Length, tTarget, pSource.Length);
return tTarget;
}
}
}

參考資料:Win32 Programmer's Reference LCMapString
尚有其他轉換功能,可以自行研究
LOCALE_SYSTEM_DEFAULT = 0x0800;
LCMAP_FULLWIDTH = 0x00800000; //LCMAP_FULLWIDTH (轉全形字)
LCMAP_HALFWIDTH = 0x00400000; //LCMAP_HALFWIDTH (轉半形字)
LCMAP_HIRAGANA = 0x00100000; //LCMAP_HIRAGANA (轉成平假名,日文)
LCMAP_KATAKANA = 0x00200000; //LCMAP_KATAKANA (轉成片假名,日文)
LCMAP_LINGUISTIC_CASING = 0x01000000; //LCMAP_LINGUISTIC_CASINGLCMAP_UPPERCASE (不明)
LCMAP_LOWERCASE = 0x00000100; //LCMAP_LOWERCASE (轉小寫,應該是英文)
LCMAP_SIMPLIFIED_CHINESE = 0x02000000; //LCMAP_SIMPLIFIED_CHINESE (轉簡體)
LCMAP_SORTKEY = 0x00000400; //LCMAP_SORTKEY (不明)
LCMAP_TRADITIONAL_CHINESE = 0x04000000; //LCMAP_TRADITIONAL_CHINESE (轉繁體)
LCMAP_UPPERCASE = 0x00000200; //LCMAP_UPPERCASE (轉大寫,應該是英文)