2010年6月21日 星期一

String 轉 short ( 0X...格式 )

要將一般的 紀錄 數字 的 string 轉為short(int16) 可以用以下的方法
在此先假設 這個 string temp 是 10 進位的數字

1. 強制轉型 (short) ex. (short)temp
2. System.Convert ex. System.Convert.ToInt16(temp)
3. Short.Parse() ex. short.Parse(temp)

--------------------------------------------------------------

但 若是 0x...格式的話 如 0x0012

則可以使用

System.Convert.ToInt16(temp,16)


參考網址 MSDN

2010年6月17日 星期四

WPF引用外部封裝的資源檔

在WPF 若要引用 XAML 檔的話 可以使用以下的簡單語法


System.Windows.Application.LoadComponent(System.Uri(@
"XXX.xaml",System.UriKind.Relative))


但是 若要使用 外部封裝的XAML檔的話 這種語法是會讀到主程式的相對路徑





如圖, A 是主程式,B 是引用的外部DLL ,此時呼叫 B 裡面的資源檔的話, 會從A 程式的相對位置找。

所以想要使用 在 B 定義的資源檔的話,code 就要改寫為


System.Windows.Application.LoadComponent( System.Uri(/DllName;component/XXX.xaml,System.UriKind.Relative))



DllName

就是B專案包成Dll的名稱




參考網頁
MSDN

Coding James






轉錄 C# 錄音 by directx

基本上是呼叫 directx 的 directsound 的函式庫來達成錄音的目的


Directx 下載

http://www.microsoft.com/downloads/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3&displaylang=en


Sample
http://blog.donews.com/uplook/archive/2005/12/14/657145.aspx

2010年6月7日 星期一

轉錄 C# 讀取 Excel

轉錄自 記憶是苦難的開始


連結字串中的HDR=YES,代表略過第一欄資料



//引用OleDb命名空間
using System.Data.OleDb;

string path = System.Windows.Forms.Application.StartupPath + @"\a.xls " ;
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + path + ";Extended Properties='Excel 8.0;HDR=YES'";
OleDbConnection objConn = new OleDbConnection(strCon);
string strCom = " SELECT * FROM [Sheet1$] ";
objConn.Open();

OleDbDataAdapter objCmd = new OleDbDataAdapter(strCom, objConn);
DataSet objDS = new DataSet();
objCmd.Fill(objDS);
objConn.Close();

for (int i = 0; i < objDS.Tables[0].Rows.Count;i++ )
{
MessageBox.Show(objDS.Tables[0].Rows[i][1].ToString());
}




----------------------------------------------------
補充 取得行數列數

延伸上面例子的 objDS 物件
row number = objDS.Tables[0].Rows.Count

Column numbers = objDS.Tables[0].Columns.Count

2010年6月4日 星期五

WPF 教學網站心得摘要 lesson 17-20

看完 微軟所提供的教學影片 所紀錄下來的心得摘要

網址
http://msdn.microsoft.com/zh-tw/netframework/cc963622.aspx

#17 WPF 影像播放與畫面處理

1. 在XAML 檔中 新增 MediaElement 即可以設定檔案來源及其它的屬性
2. Triggers 在Grid宣告控制其他屬性
3. 利用event 來實現pause and resume 影片的功能
4. Slibar 的範例 (假設 mediaElement 命名為 mediaElement1)
a. 取得影片長度
mediaElement1.NaturalDuration.TimeSpan.TotalMilliseconds;
b. 取得影片現在播放位置
mediaElement1.Position.TotalMilliseconds;


#18 控制項的資料繫結技巧 #1 – 控制項之間的資料繫結
1. Binding 目標: 任何元素與屬性
2. Binding 來源: CLR 物件,
WPF元素,
ADO.NET,
XML
3. Binding 模型: 一次繫結、單向繫結,雙向繫結

4. 動態Binding : inotufyPropertyChanged、DependencyProperty、PropertyDescriptor

5. 語法範例 { Binding Path = Value, ElementName= Binding物件名稱 }
6. ObjectDataProvider 的使用,把物件宣告在XAML檔

#19 控制項的資料繫結技巧 #2 – 資料樣版的定義與套用

1. 資料樣板的設定 (宣告一個class及在XAML檔中宣告引用)
2. XAML檔 新增NameSpace , 例 xmlns = "clr-namespace:NameSpace名稱"

#20 控制項的資料繫結技巧 #3 – Master-Details 資料繫結

1. 宣告樹狀結構CLASS ,以大聯盟球隊為例,(聯盟->區域->球隊)
2. 在listBox 設定兩個屬性決定,資料來源和樣板
a. 資料來源ItemsSource : EX. ItemsSource="{Binding Path=Divisions/Teams}"
b. 樣板ItemTemplate: EX. ItemTemplate="{DynamicResource myTemplate}"

2010年6月2日 星期三

C# 隱藏 Cursor 和 Stylus

Cursor 隱藏 /顯示
顯示 Cursor
System.Windows.Forms.Cursor.Hide();
顯示 Cursor
System.Windows.Forms.Cursor.Show();

詳細可參閱 MSDN


Stylus 隱 藏 /顯示

轉錄 Coding James 在 WPF中關閉觸控指標(Disable Touch Pointer)




private void DisableTouchStylus(UIElement u)
{
/// disable flicks gesture
Stylus.SetIsFlicksEnabled(u, false);

/// disable press and hold gesture
Stylus.SetIsPressAndHoldEnabled(u, false);

/// disable tap gesture
Stylus.SetIsTapFeedbackEnabled(u, false);

/// disable touch pointer
Stylus.SetIsTouchFeedbackEnabled(u, false);
}



c# BackGroundWorker

BackGroundWorker

簡單的說讓成是在背景後台環境下執行而不影響 UI

這裡敘述還蠻詳細的
http://www.cnblogs.com/scottckt/archive/2008/05/08/1188974.html

C#取得滑鼠座標

在網路上找到兩種方式

1. GetCursorPos

引用 user32.dll 的 GetCursorPos function

sample code


// We need to use unmanaged code
[DllImport("user32.dll")]
// GetCursorPos() makes everything possible
static extern bool GetCursorPos(ref Point lpPoint);



Point 中包含 滑鼠的X,Y 座標

參考網站
http://blog.sina.com.cn/s/blog_53864cba0100ch28.html

不過我試不出來....

2. Mouse.GetPosition

使用 System.Windows.Input 的 mouse.GetPosition 傳入 window 或 panel ...
回傳 滑鼠在該物件的 相對座標 (Point)

code


using System.Windows.Input;

......



// displayArea is a StackPanel and txtBoxMousePosition is
// a TextBox used to display the position of the mouse pointer.
Point position = Mouse.GetPosition(displayArea);
txtBoxMousePosition.Text = "X: " + position.X +
"\n" +
"Y: " + position.Y;



參考網址 http://msdn.microsoft.com/zh-tw/library/system.windows.input.mouse.getposition%28VS.90%29.aspx

開新視窗產生錯誤 XamlParseException

在 WPF 中嘗試由程式呼叫打開新視窗(open new window),不知道為何會產生這個錯誤





後來查了一下,推測應該是資源沒有釋放出來,解覺得方式很簡單,只要引用 msvcr70.dll 的 _fpreset() 函式即可, 若是xp環境下可以不比特別指出這個dll 的位置,但在win7(64位元,32位元沒試過)中必須要明確的引用這個dll的路徑

msvcr70.dll 在 xp 的路徑在 C:\WINDOWS\system32


sample code

FailOpenWindow.xaml.cs (Interaction logic for FailOpenWindow.xaml)



public partial class FailOpenWindow : Window
{

[DllImport("msvcr70.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int _fpreset();

public FailOpenWindow()
{
// Reset the Floating Point (When called from External Application there was an Overflow exception)
_fpreset();

InitializeComponent();
}

}




參考網址 http://social.msdn.microsoft.com/Forums/en/wpf/thread/a31f9c7a-0e15-4a09-a544-bec07f0f152c