c#开发-基础知识及有用技巧(一)
???例如:TimeSpan span = dateTime1 - dateTime2? ?方便啊
2、從類(Class)返回一個System.Type類型,用typeof關鍵字
3、從一個對象實例(Object)返回一個System.Type類型,用GetType方法
4、判斷是否處于設計狀態:DesignMode屬性
5、根據GUID創建對象實例
System.Guid?pGuid?=?new?Guid(guid);
System.Type?ObjectCustorm?=?Type.GetTypeFromCLSID(pGuid);
Object?obj?=?Activator.CreateInstance(ObjectCustorm); 6、GDI+不支持xor繪制模式的近似解決方法:
ControlPaint.DrawReversibleFrame、ControlPaint.DrawReversibleLine方法
7、獲取Enum類型中的所有枚舉值:
Enum.GetNames方法
將字符串轉換成枚舉值
Enum.Parse方法
8、Label放在圖片上時,使Label透明
picLogo.Controls.Add(lblStatus);
lblStatus.BackColor?=?Color.Transparent; 9、調用幫助文件
打開幫助文件
Help.ShowHelp(this,@"c:/windows/help/mspaint.chm");
打開幫助文件,并跳轉到指定的主題
Help.ShowHelp(this,@"c:/windows/help/mspaint.chm","paint_lines.htm");
打開幫助文件,并轉到“索引”選項卡
Help.ShowHelpIndex(this,@"c:/windows/help/mspaint.chm","paint_lines.htm");
在屏幕上顯示一條浮動的幫助信息
Help.ShowPopup(this,"這里是幫助信息",new Point(100,100));
10、通過AppDomain在應用程序之間傳遞數據
例如,兩個系統可能會共用登錄信息,登錄一個系統后,再啟動另一個系統時,不需要重新登錄。
先定義一個在應用程序之間傳遞的數據的類,該類必須從MarshalByRefObject繼承:
///?用于在不同的appdomain之間傳遞參數
///?</summary>
public?class?AppDomainInfo:MarshalByRefObject
{
????public?int?UserID;
}
然后可以這樣打開新的應用程序
????????????????????setup.ApplicationName?=?"測試程序";????????????????????
????????????????????AppDomain?appDomain?=?AppDomain.CreateDomain("TestDomain",?null,?setup);
????????????????????AppDomainInfo?domainInfo?=?new??AppDomainInfo();
????????????????????domainInfo.UserID?=?Winsharp.BaseClass.AppConfigInfo.UserID;
????????????????????appDomain.SetData("domainInfo",domainInfo);
????????????????????object?obj?=?appDomain.CreateInstanceFromAndUnwrap(str,"TestDomain.Test");
????????????????????(obj?as?Form).Show();
11、換行字符串,相當于"\r\n",Environment.NewLine
? ?????API中有GetTickCount函數,C#中為Environment.TickCount
12、取得安裝操作系統輸入的用戶姓名和公司名稱:
????????????????? ?cmicRegKey=cmicRegKey.OpenSubKey("Microsoft");???
????????????????cmicRegKey=cmicRegKey.OpenSubKey("MS?Setup?(ACME)");???
????????????????cmicRegKey=cmicRegKey.OpenSubKey("User?Info");???
????????????????object?cmicCompany?=?cmicRegKey.GetValue("DefCompany");?????
????????????????object?cmicUser?=?cmicRegKey.GetValue("DefName");???
13、C# WinForm 捕獲最小化事件(來自Limon Tea的隨筆http://limon7.cnblogs.com/archive/2006/07/23/457865.html)
?雖然Form類沒有提供Minimize的事件,但還是可以通過重載Deactive來實現
當Form失去焦點后,測試WindowState取得Form狀態,若為Minimized既是最小化事件。
本例為最小化后隱藏窗口:
????????{
????????????if?(this.WindowState?==?FormWindowState.Minimized)
????????????????this.Visible?=?false;
????????}
還有種方法更加直接,重載WndProc:
const?int?WM_SYSCOMMAND?=?0x112;
const?int?SC_CLOSE?=?0xF060;
const?int?SC_MINIMIZE?=?0xF020;
const?int?SC_MAXIMIZE?=?0xF030;
protected?override?void?WndProc(ref?Message?m)
{
????if?(m.Msg?==?WM_SYSCOMMAND)
????{
????????if?(m.WParam.ToInt32()?==?SC_MINIMIZE)
????????{
????????????this.Visible?=?false;
????????????return;
????????}
????}
????base.WndProc(ref?m);
}
14、FromBase64String的問題
?? 在使用Convert.ToBase64String()對字符串進行Base64編碼時,注意的幾點:
???? 例:string s = "Hello";
???????? byte[] bytes = Convert.FromBase64String(s);
? 以上代碼在運行時會拋出FormatException異常.提示為:Base-64字符數組的無效長度
原因:當Convert.FromBase64String方法的參數s的長度小于 4 或不是 4 的偶數倍時,將會拋出FormatException。
??
???? 例:
???????? Convert.FromBase64String("Hell");????? // Normal.
???????? Convert.FromBase64String("Hell ");???? // Normal.(忽略空格)
???????? Convert.FromBase64String("Hello!");??? // throw FormatException.
???????? Convert.FromBase64String("Hello Net"); // Normal.(忽略空格)
15、避免程序重復運行。(即只允許運行一個實例)
????if(appSingleton.WaitOne(0,?false))?
????{
??????Application.Run(new?FormMain(););
????}
???else
???{
??????MessageBox.Show("程序已經運行");
???}
16、VB中的chr和asc函數在C#中沒有,C#中只要用Convert類中的函數進行轉換就可以了,如:
???? int n = Convert.ToInt32('a');
???? char c = Convert.ToChar(99);
???? 另外,空的char值的獲得:Convert.ToChar(0) 例如,在設置了一個textBox的PasswordChar屬性后,要清除它,就只能這樣了:textBox1.PasswordChar = Convert.ToChar(0) ;
17、C#的String.Format舉例(http://blog.sina.com.cn/u/4a99b1ba010005ax)
|
| |||||||||||||||||||||||||||||
|
18、bytes[]和int的相互轉換 ??int???s???=???100;???
??byte[]???shi???=???System.BitConverter.GetBytes(s);?????????
??int???sh???=???System.BitConverter.ToInt32(shi,0);
19、BitArray和int的相互轉換
int[]???a???=???new???int[1];?????a[0]???=???100;???
??int[]???b???=???new???int[1];???
????
??System.Collections.BitArray???shit???=???new???BitArray(a);???
??shit.CopyTo(b,0);
20、隨機數:
1) System.Random
2) xdev所提到的System.Security.Cryptography.RNGCryptoServiceProvider
3) 直接調用Platform SDK中的CryptGenRandom()函數。
其中,和1)相比,2)和3)可以被作為真正的隨機數來使用。
21、最簡單的實現雙緩沖繪圖:
this.SetStyle(ControlStyles.DoubleBuffer |
????? ControlStyles.UserPaint |
????? ControlStyles.AllPaintingInWmPaint,
????? true);
?? this.UpdateStyles();
還有一種方法,是先建一個bmp,在該bmp上繪制完畢后,最后一次性復制到目標畫布上。但在實際使用中,我發現該方法有時反倒閃爍得厲害,不知是為什么,郁悶~
22、取得局域網內本機IP地址
String name = Dns.GetHostName();
IPHostEntry ips = Dns.GetHostByName(name);
return ips.AddressList[0].ToString();
23、取得局域網廣播地址
IPv4廣播地址的定義是網絡號碼與網絡掩碼邏輯“非”之間的邏輯“或”。
??? 例如一個地址為:197.8.43.211,其子網掩碼為255.255.255.240則其網絡號碼為兩者的二進制邏輯"與",即197.8.43.208 網絡掩碼的邏輯"非"為0.0.0.15,與網絡號碼197.8.43.208二進制邏輯"或"的結果為197.8.43.223,即該子網的廣播地址.
24、Asp.net直接下載文件
long?fileSize?=?fileStream.Length;?
Context.Response.ContentType="application/octet-stream";?
Context.Response.AddHeader("Content-Disposition","attachment;?filename=\""?+?fileName?+?"\";");?
Context.Response.AddHeader("Content-Length",fileSize.ToString());?
byte[]?fileBuffer=new?byte[fileSize];?
fileStream.Read(fileBuffer,?0,?(int)fileSize);?
Context.Response.BinaryWrite(fileBuffer);?
Context.Response.End();??
25、十進制數轉成十六進制字符串
int num =123;
string str = Convert.ToString(num,16);
十六進制字符串轉十進制數
string str = "7b";
int num = Convert.ToInt32(str,16);
其它進制也是一樣,只要把16改進2或8或10就可以了.
26、在網頁上實現html編輯的最簡單代碼(來自微軟網站)
<head>
<title>DHTML?編輯控件代理示例</title>
<script?type="text/javascript">
function?FillEditor()?{
????var?doc?=?editor.document;
????doc.designMode?=?"on";
????doc.write("<body><p><i>可視化</i>?<u>安靜</u></p></body>");
????doc.close();
}
</script>
</head>
<body?onload="FillEditor()">
??<iframe?id="editor"?scrolling="yes"?height="100"?width="300">
??</iframe>
??<p>
??<input?type=button?
?????value="Submit"?
?????onclick=
???????"alert(editor.document.getElementsByTagName('HTML')[0].outerHTML)">
</body>
</html>
此頁面顯示了包括格式化 HTML 的可編輯區域。您可在此區域中輸入內容,也可使用熱鍵,如 CTRL+I 切換斜體,CTRL+U 切換下劃線。當按下 Submit 按鈕時,出現一個消息框,顯示 <iframe> 元素的 HTML 內容。要等效地實現 DHTML 編輯控件的屬性、方法和事件,必須要使用腳本。
出于安全考慮,只有來自相同域的內容才可跨過 <iframe> 界限進行訪問。要確保框架的內容可被訪問,必須使用 src 屬性,從同一域的 URL 中對其進行初始化,正如下列示例所示:
<iframe id="editor" scrolling="yes" height="100" width="300" src="templates/blank.htm"> </iframe>有關在 Internet Explorer 中使用 designMode 屬性進行編輯的詳細信息,請參閱 Microsoft 網站上的 Introduction to MSHTML Editing(英文)頁面。
27、強制類型轉換與as類型轉換的區別
??????當類型轉換非法時,強制類型轉換將拋出一個System.InvalidCastException異常,而as不會拋出異常,它返回一個null值。
28、FromBase64String(string s)函數,對s有如下要求,否則會報錯“Base-64字符中的無效字符”:
???????? s ? 由基 ? 64 ? 數字、空白字符和尾隨填充字符組成。從零開始以升序排列的以 ? 64 ? 為基的數字為大寫字符“A”到“Z”、小寫字符“a”到“z”、數字“0”到“9”以及符號“+”和“/”。 ? 空白字符為 ? Tab、空格、回車和換行。s ? 中可以出現任意數目的空白字符,因為所有空白字符都將被忽略。? 無值字符“=”用于尾部的空白。s ? 的末尾可以包含零個、一個或兩個填充字符。
29、這一條不是C#的,是數據庫的,有用,收藏一下~
幾個刪除重復記錄的sql語句
(1)用rowid方法據據oracle帶的rowid屬性,進行判斷,是否存在重復,語句如下:
查數據:
??? select * from table1 a where rowid !=(select? max(rowid)?
??? from table1 b where a.name1=b.name1 and a.name2=b.name2......)
刪數據:
?? delete? from table1 a where rowid !=(select? max(rowid)?
??? from table1 b where a.name1=b.name1 and a.name2=b.name2......)
(2)group by方法
查數據:
select count(num), max(name) from student --列出重復的記錄數,并列出他的name屬性
group by num
having count(num) >1 --按num分組后找出表中num列重復,即出現次數大于一次
刪數據:
delete from student
group by num
having count(num) >1
這樣的話就把所有重復的都刪除了。
(3)用distinct方法 -對于小的表比較有用
create table table_new as? select distinct *? from table1 minux
truncate table table1;
insert into table1 select * from table_new;
隨時補充吧
總結
以上是生活随笔為你收集整理的c#开发-基础知识及有用技巧(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样让WinForms下DataGrid
- 下一篇: Tech·Ed 2006中国 实况报道