PIXNET Logo登入

nineaddnine的部落格

跳到主文

歡迎光臨nineaddnine在痞客邦的小天地

部落格全站分類:不設分類

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 7月 02 週三 201410:51
  • SendMessage函數的常用消息及其應用大全




SendMessage函數的常用消息及其應用
  文本框控件通常用於輸入和編輯文字。它屬於標准 Windows 編輯控件的一個子類,所以它支持所有
編輯控件消息。這兒講述的技術也適用於由其他廠商設計的,以Windows編輯控件類為基礎的其他控件。
  函數原型:
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  其中四個參數的含義和說明如下:
1.hWnd:
  對象的句柄。希望將消息傳送給哪個對象,就把該對象的句柄作為實參傳送,在 VB 中可以簡單地
用「對象.hWnd」獲得某個對象的句柄,如 Text1.hWnd和 Form1.hWnd分別可以得到 Text1和Form1的句
柄。它是一個長整型數。Windows給每個控件一個編號,這個編號就稱為窗口句柄。有了這個句柄,我們
就可告訴 Windows 我們要控制哪個控件,所以這個句柄在 API 調用中至關重要。VB 的大多數控件都包
括hwnd屬性,如下拉框、TreeView等,窗體也有這個屬性。但也有一些控件沒有這個屬性,如標簽控件。
沒有這個屬性就無法利用Windows API函數,但可以節省系統資源。
 
2.wMsg:
  被發送的消息。根據具體需求和不同的對象,將不同的消息作為實參傳送,以產生預期的動作。使
SendMessage 傳遞消息,大多是為了完成以下幾個工作: 
  ①設置控件的一些選項,象我們要使用的CB_SETDROPPEDWIDTH的就屬於這種情況。盡管VB的每個控
件都提供了許多屬性,但仍然有許多控件的選項沒有包括在其中。而這些選項中的大多數都可以利用該
函數進行設置。
  ②獲得控件的一些設置。同上一種情況相反,有時我們需要獲得控件的一些設置,相當於讀取屬性。
例如,如果想知道一個下拉框的下拉部分的寬度是多少,就可以向控件發送CB_GETDROPPEDWIDTH消息。
對於這種情況,SendMessage函數的返回值就是結果。 
  ③執行一定的操作。例如,我們要在下拉框中尋找是否有「ABC」這個字符串,當然,我們可以編寫
一個循環,逐條比較看是否存在這樣的字符串。如果使用API,我們只需要向下拉框發送CB_FINDSTRING
消息,這條消息就會自動進行查找工作並返回結果。 
  ④模擬用戶操作。我們有時希望模擬用戶的操作,比如關閉其他應用程序的窗口。其實只要我們能知
道那個窗口的句柄,我們就可以發送WM_CLOSE消息給那個窗口,窗口接受到這條消息就會關閉,如同用戶
關閉窗口一樣。 
3.wParam、4.lParam:
  附加的消息信息。這兩個是可選的參數,用來提供關於wMsg消息更多的信息,不同的wMsg可能使用這
兩個參數中的0、1或2個,如果不需要哪個附加參數,則將實參賦為NULL(在VB中賦為0)。
  lParam定義為Any類型。指定 Any類型可禁止VB進行類型檢查,從而允許將任意數據類型傳遞給該過
程。由於每條消息對參數的類型和傳遞方式的要求都不同:有的可能要求為Long型,有的可能要求為自定
義類型;大多數要求按傳值方式傳遞,但也有一些要求按傳地址方式。為了滿足各種要求,我們將這個參
數定義為Any類型。比如,我們要傳遞一個Long型變量lData。如果消息要求傳地址方式傳遞,可以使用: 
  SendMessage ……, lData 
  而如果要求傳值方式傳遞,則使用 
  SendMessage ……, ByVal lData 
  如果傳遞常數,我們則需要使用類型後綴來指定常數的類型,比如"0&",表示Long型的常數0,如 
  SendMessage ……, ByVal 0& 
  我們也可以使用類型轉換函數CLng將常數指定為Long型,如CLng(0)。
  程序中,有時定義 lParam As Any,有時定義 ByVal lParam As String。這是為什麼呢?對於
SendMessage函數,lParam的使用是很靈活的,在一般情況下,lParam是一個指針,它指向的數據類型
有三種:長整形、自定義數據結構類型、字符串類型。對於前兩種類型,需要將 lParam定義為 lParam
As Any,從而將 lParam 數據的指針傳遞到 SendMessage 函數。對於字符串類型,則需要定義 Byval
lParam As String,因為字符串類型數據不同,只有定義 ByVal,得到的才是字符串的指針,如果沒有
ByVal,得到的將是指向字符串指針的指針。另外對於少數的消息來說,SendMessage 函數需要的只是
lParam 本身的值,這時就需要將 lParam定義為 Byval lParam As Long,或者在程序調用時在 lParam
之前加 ByVal。
  當用戶在編輯控件上進行各種操作時,其父窗口將收到 WM_COMMAND 通知消息,lParam帶控件句柄
(hWnd),同時 wParam 的低16位帶控件的 ID,高16位帶有如下表的消息代碼:
常用編輯控件消息:
EC_LEFTMARGIN(&H1)                    EC_USEFONTINF 設置左邊距時使用
EC_RIGHTMARGIN                        EC_USEFONTINF 設置右邊距時使用
EC_USEFONTINF,O,邊距                  設置編輯控件的左、右邊距,當wParam含EC_LEFTMARGIN時在lParam的低16位指定左邊距點數,當wParam含EC_RIGHTMARGIN時在lParam的高16位指定右邊距點數。當指定wParam為EC_USEFONTINFO時,則用當前字體的字符"A"的寬度指定右邊距和字符"C"的寬度指定左邊距lParam被忽略。
EM_CHARFROMPOS(&HD7=215),0,           取得編輯控件中指定位置的字符相對於文本頭部的偏移量。使用本操作應先在第4個參數的高16位指定行號,低16位指定列號(或一個POINTAPI結構),行列是按編輯控件的客戶區左上角為原點(0,0)計算的。如果指定的位置超出控件客戶區則返回-1
EM_CANUNDO(&HC6=198),0,0             決定前一次編輯操作是否能夠撤消:檢測控件撤消緩沖區是否為空,通常控件把最後一次在控件的編輯操作保存在一個撤消緩沖區,如果緩沖區非空則返回TRUE表示上次操作可以撤消,否則返回FALSE,應用程序可以利用該返回值來禁止或允許菜單或工具條的"撤消"項。
EM_EMPTYUNDOBUFFER(&HCD=205 ),0,0     清除控件的撤消緩沖區,使其不能撤消前一次編輯操作 
EM_FMTLINES(&HC8=200)                決定是否在取回的文本宇串中包含軟回車字符
EM_GETFIRSTVISIBLEINE(&HCE=206),0,0   獲得文本控件中處於可見位置的最頂部的文本所在的行號
EM_GETLINE(&HC4=196 ),行號,ByVal 變量 獲取編輯控件某一行的內容,變量須預先賦空格
EM_GETLINECOUNT(&HBA=186,0,0          獲取編輯控件的總行數
EM_GETMODIFY(&HB8=184),0,0           判斷編輯控件的內容是否已發生變化,返回TRUE則控件文本已被修改,返回FALSE則未變。 
EM_GETPASSWORDCHAR( ),0,0            獲取編輯控件的密碼字符,返回NULL表示沒有字符
EM_GETRECT(&HB2=178),0,結構          獲取編輯控件的格式化矩形
EM_GETTHUMB(&HBE=190),0,0             取得多行文本編輯控件的滾動框的當前位置(注意:是象素值)
EM_GETSEL(&HB0=176),0,變量            獲取光標位置(以字節數表示),或:(緩沖區起點,緩沖區終點)取得編輯控件中選定內容的范圍,返回值中低16位為起點,高16位為終點
EM_GETHANDLE(&HBD=189),0,0            取得文本緩沖區
EM_GETWORDBREAKPROC(&HD1=209),0,0     取得整字換行回調函數EditWordBreakProc指針
EM_GETLIMITTEXT(WM_USER+37=1061),0,0  獲取一個編輯控件中文本的最大長度 
EM_GETMARGINS( ),0,0                  獲取編輯控件的左、右邊距,返回值低16位為左邊距,高16位為右邊距(不得用於NT3.51) 
EM_LIMITTEXT(&HC5=197),最大值,0       設置編輯控件中的文本長度
EM_SCROLLCARET(&HB7=183),0,0          把可見范圍移至光標處
EM_LINEFROMCHAR(&HC9=201),偏移值,0    獲取指定位置(或:-1,0 表示光標位置)所在的行號
EM_LINEINDEX(&HBB=187),行號,0         獲取指定行(或:-1,0 表示光標所在行)首字符在文本中的位置(以字節數表示)
EM_LINELENGTH(&hC1=193),偏移值,0      獲取指定位置所在行(或:-1,0 表示光標所在行)的文本長度(以字節數表示)
EM_POSFROMCHARPOINT,結構地址,偏移值   取得指定字符位置的行列號,偏移值是字符相對於文本頭部的偏移。
EM_LINESCROLL(&HB6=182),列數,行數     指定行數的文本水平滾動,每次滾動N列
EM_EXGETSEL(&H434=1076)   
EM_EXSETSEL(&H437=1079),0,結構        RichEdit控件設置文本選定范圍,參閱 EM_SETSEL 消息,結構是指 CHARRANGE 結構
EM_PASTESPECIAL(&H440=1088),2(1),1    RichEdit控件粘貼剪貼板中的位圖(或文本)
EM_FINDTEXT(&H738=1080)               RichEdit控件正文搜索操作
EM_FINDTEXTEX(&H44F=1103)             同上
EM_SETTEXTEX(&H461=1121)              RichEdit控件正文替換/插入操作
EM_SETTARGETDEVICE, GetDC(RichText.hWnd), RichText.Width / 15)設置 RichTextBox 自動換行,後續代碼是:RichText.RightMargin = iif(RichText.RightMargin = 0,1,0)
EM_SETTARGETDEVICE, 0, 1              設置 RichTextBox 不自動換行
EM_POSFROMCHAR(&HD6或&H426)           判斷指定字符在編輯控件的位置(用於NT3.51) 
EM_SCROLL(&HB5=181),*,0               文本垂直滾動。第三個參數*控制滾動方向:SB_LINEDOWN(1)向下滾動一行,SB_LINEUP(0)向上滾動一行,SB_PAGEDOWN(3)向下滾動一頁,SB_PAGEUP(2)向上滾動一頁。
EM_REPLACESEL(&HC2=194),1(0),字符串   用指定字符串替換編輯控件中的當前選定內容,如果第三個參數wParam為1,則本次操作允許撤消,0禁止撤消。字符串可用傳值方式,也可用傳址方式(例:SendMessage Text1.hwnd, EM_REPLACESEL, 0, Text2.Text '這是傳值方式)
EM_SETSEL(&HB1=177),起點,終點        設置編輯控件中文本選定內容范圍(或設置光標位置),該范圍被反相顯示,用於為復制、替換、粘貼、剪切、刪除等編輯功能指定范圍,光標將被移至指定的終點後面。還可使用指定相同起點和終點來移動光標而不是選定范圍。當指定的起點等於0和終點等於-1時,文本全部被選中,此法常用在清空編輯控件。當指定的起點等於-2和終點等於-1時,全文均不選,光標移至文本未端,此法常用在文本未端追加內容。注意:當控件沒有輸入焦點時,本操作將會失敗,一般在執行本操作前都應調用SetFocus先取得輸入焦點。
EM_UNDO(&HC7=199),0,0                 撤消前一次編輯操作,當重復發送本消息,控件將在撤消和恢復中來回切換
EM_SETCHARFORMAT(&H444)               改變選定文本的顏色
EM_SETHANDLE(&HBC=188),緩沖區指針,0  為編輯控件指定新的文本緩沖區。此操作僅適用對話框創建帶DS_LOCALEDIT風格的控件。
EM_SETLIMITTEXT,長度(字節),0          設置編輯控件中的文本最大長度(不得用於NT3.51)
EM_SETMARGINS(&HD3=211)               設置編輯控件的左、右邊距(不得用於NT3.51)
EM_SETMODIFY(&HB9=185),1(0),0         設置或清除一個編輯控件的修改標志
EM_SETPASSWORDCHAR(&HCC=204),字符,0   指定控件用來顯示密碼的字符,缺省為"*"。當第三個參數wParam為0時,本操作將清除控件的ES_PASSWORD風格,並按實際字符顯示。
EM_SETREADONLY(&HCF=207),1(0),0       決定是否將編輯控件設為只讀,同時決定控件的ES_READONLY風格
EM_SETRECT(&HB3=179),0(或RECT),結構地址      為一個編輯控件設置格式化矩形
EM_SETRECTNP(&HB4=180),0(或RECT),結構地址    為一個編輯控件設置格式化矩形,只是控件此時不會重畫
EN_CHANGE(&H300=768)                  編輯控件的內容發生改變。與EN_UPDATE不同,該消息是在編輯框顯示的正文被刷新後才發出的。 
EN_ERRSPACE(&H500=1280)               任何時候只要由於內存不足以完成一項編輯操作 
EN_HSCROLL(&H601=1537)                用戶單擊了編輯控件的水平滾動條。注意:這條消息是在控件更新顯示之前發送出去的。
EN_VSCROLL(&H602=1538)                用戶單擊了編輯控件的垂直滾動條。注意:這條消息是在控件更新顯示之前發送出去的。
EN_KILLFOCUS(&H200=512)               編輯控件失去了輸入焦點
EN_SETFOCUS(&H100=256)                編輯控件獲得了輸入焦點
EN_UPDATE(&H400=1024)                 控件准備顯示改變了的正文時發送該消息。它與EN_CHANGE通知消息相似,只是它發生於更新文本顯示出來之前。 
EN_MAXTEXT(&H501=1281)                用戶輸人的文字數超出由EM_LIMITTEXT消息規定的界限,或超出由VB Maxlength屬性規定的界限,就會發送這條消息 。此外,倘若不允許自動進行水平滾動,同時插入點要超出控件的寬度;或者不允許自動垂直滾動,同時插入點要超出控件的高度,那麼也會觸發這條消息。在沒有ES_AUTOHSCROLL或ES_AUTOVSCROLL的編輯框中,當正文超出了編輯框的邊框時也會發出該消息。 
編輯風格消息:
ES_MULTILINE                         指定編輯控件能否進行多行文本編輯,若多行編輯器不指定ES_AUTOHSCROLL風格,則會自動換行,用戶每按一次Enter,在當前光標處輸入一個回車換行符(0Dh,0Ah),文本增加一行。若不指定ES_AUTOVSCROLL,則多行編輯器會在窗口中正文裝滿時發出警告聲響。
ES_LEFT                               文本顯示居左。
ES_CENTER                            文本顯示居中。
ES_RIGHT                             文本顯示居右。
ES_LOWERCASE                         把用戶輸入的字母統統轉換成小寫字母。
ES_UPPERCASE                         把用戶輸入的字母統統轉換成大寫字母。
ES_OEMCONVERT                        把輸入的文本從ANSI碼轉換成OEM碼,然後又轉換成ANSI碼,目的是保證函數AnsiToOem的正確調用。這在編輯框中包含文件名時是很有用的。
ES_AUTOHSCROLL(自動增加水平滾動條?) 當用戶在行尾鍵入一個字符時,正文將自動向右滾動10個字符,當用戶按回車鍵時,正文總是滾向左邊。
ES_AUTOVSCROLL                       當用戶在最後一個可見行按回車鍵時,正文向上滾動一頁。
ES_NUMBER                            只接收數碼輸入,其它字符輸入一律無效。
ES_NOHIDESEL(&H100=256)               當編輯框失去輸入焦點時,選中的文本將隱藏,正文中的選擇保持不變。缺省時正文中的選擇將失效,當獲得輸入焦點後才又顯示出來。
ES_READONLY                          將編輯框設置成只讀的。
ES_PASSWORD(&H20=32)                  使所有鍵入的字符都用"*"來顯示。
ES_WANTRETURN                        使多行編輯器接收回車鍵輸入並換行。如果不指定該風格,按回車鍵會選擇缺省的命令按鈕,這往往會導致對話框的關閉。
列表框操作:
LB_FINDSTRING(&H18F=399),-1,ByVal 字串   查找列表項的字符串,返回值=字符串所在的列表項的索引。-1表示從第0行開始查找,如果改為一個有效的列表項索引值,將從該行開始查找。
LB_ITEMFROMPOINT(&H1A9=425)              獲取光標所在的列表項的索引
LB_SETHORIZONTALEXTENT(&H194=404),長度,0 設置列表框的橫向滾動條以及滾動長度,長度為象素值
組合框操作:
CB_SHOWDROPDOWN(&H14F),1(0),0         打開(關閉)組合框的列表
TVM_SETBKCOLOR(&H1100+29=4381)        設置擴展樹型列表控件的背景色(TVM開頭的常數)
常用窗口消息:
WM_GETFONT(&H31=49)                   得到當前控件繪制文本的字體(的句柄)
WM_GETTEXT(&HD=13),變量長度,變量       取得窗體的標題,變量須預先賦空字串(chr(0)),變量長度=Len(變量)
WM_SETTEXT(&HC=12),0,ByVal "字串"     設置窗體的標題
WM_NCLBUTTONDOWN(&HA1=161),2,0        在非客戶區,即邊框及標題欄上(假如定義的是一個組件,則非客戶區包括Form等)按下鼠標左鍵;
WM_LBUTTONDOWN(&H201=513),2,0         在客戶區,也就是除邊框及標題欄以外按下鼠標左鍵
WM_VSCROLL(&H115=277),&H10000*p+SB_THUMBPOSITION(&H4),0 同步滾動文本,p是位置改變量
WM_PAINT
WM_USER(&H400=1024)
WM_CUT(&H300=768),0,0                 剪切
WM_COPY(&H301=769)),0,0               復制
WM_PASTE(&H302=770)),0,0              粘貼
WM_CLEAR(&H303=771)),0,0              刪除
WM_UNDO(&H304=772)),0,0               撤消
按紐消息:
BM_SETSTYLE(&HF4)                   設置按紐樣式
BS_RADIOBUTTON(&H4)                 收音機旋紐式的按紐,是 BM_SETSTYLE 使用的參數



(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(0) 人氣(4,060)

  • 個人分類:程式
▲top
  • 7月 02 週三 201410:04
  • SendMessage函數

首先 我們了解一下Windows的消息機制。Windows是一個消息驅動式系統,Windows消息提供應用程序與應用程序之間,應用程序與Windows系統之間進行通信的手段。
舉個例子,打開記事本程序,該程序有一個 「文件「菜單。 那麼,在運行該程序的時候,如果用戶單擊「文件菜單「裡的「新建「命令, 這個動作將被Windows所捕捉,Windows經過分析得知這個動作應該由我們打開的記事本程序所來處理,然後Windows就發送個消息 譬如我們編程的時候有時用到的 WM_COMMAND的消息給記事本,然後記事本就把這個消息處理掉。 這個過程就是消息處理。

SendMessage函數功能:該函數將指定的消息發送到一個或多個窗口。此函數為指定的窗口調用窗口程序,直到窗口程序處理完消息再返回。而函數PostMessage不同,將一個消息寄送到一個線程的消息隊列後立即返回。
(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(0) 人氣(1,727)

  • 個人分類:
▲top
  • 6月 25 週三 201413:06
  • 用VB.NET實現多執行緒

http://mogerwu.pixnet.net/blog/post/24466436-%E7%94%A8vb.net%E5%AF%A6%E7%8F%BE%E5%A4%9A%E5%9F%B7%E8%A1%8C%E7%B7%92
現在程式越寫越大,CPU功能越來越強,要能夠聽充分的利用CPU的能力才能讓我們的程式在複雜的運算下以最快的速度反應,除了在演算法上面下功夫外,最簡單的就是能夠利用多核心CPU的能力,因此會寫多執行緒(大陸稱為多線程)的程式變成現今高級程式設計師必須具備的技能。
既然要討論多執行緒,就必須了解能夠應用多執行緒的場合。最簡單的場合就是有大量同樣的運算方式但是不同的輸入資料需要在極短的時間運算出來,這樣的場合很多,比如說類神經網路、客製化的電子報…等等。或者是需要近乎同時處理大量使用者輸入並且做出反應的場合,例如線上遊戲的某些處理,雖然輸入所要處理的程序可能不同,但是必須能夠快速的反應回饋。
VB.NET內建了多執行緒的類庫,也就是說只要會使用類庫,就可以很容易的寫出多執行緒的程式。要使用類庫首先就是要引入類庫,程式碼如下
(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(0) 人氣(2,740)

  • 個人分類:
▲top
  • 6月 04 週三 201414:28
  • [VB.NET][C#.NET] Windows Form /控制項 事件 的 先後順序 / 事件方法覆寫

2009-7-24 下午 07-57-37
轉貼http://www.dotblogs.com.tw/yc421206/archive/2009/07/24/9668.aspx
 
以下文字備份
(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(1) 人氣(1,832)

  • 個人分類:
▲top
  • 4月 28 週一 201409:33
  • bcb設定成獨立可執行檔

執行檔裡面都是一堆
動態連結檔
導致沒辦法 將執行檔 帶到沒BCB環境中 執行
解決辦法如下:
Project->Options->Packages->Build with runtime packages 
Project->Options->Linker->Use dynamic RTL
這兩個選項的勾勾取消掉
就可以了
(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(0) 人氣(67)

  • 個人分類:
▲top
  • 4月 24 週四 201411:52
  • VB6 FM20.dll 物件程式庫尚未註冊 Win7 問題解決

複製XP系統上可以用的FM20.DLL,共三個檔案,覆蓋到WIN7的SYSTEM32之後在進行註冊regsvr32 FM20.dll。
 
(已傳送到Google硬碟空間)
(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(3) 人氣(2,417)

  • 個人分類:
▲top
  • 3月 26 週三 201415:56
  • 房屋整修心得

2005北市成交的中古屋裡面,每四戶中就有一戶是超過二十五年的建築,相信這裡也應該有很多人有這樣的的房子。
一個二、三十多年的公寓住宅,就算堪用的內裝,也因居家設備的進步、家庭結構的改變、賦予新的生活氣氛…而需重新裝修。
小弟日前正完成了此項辛苦但充滿成就感的工作,這裡有些小經驗跟大家分享。為了有系統的讓大家瞭解,故細分下列幾大項,逐項敘述、分期連載,更歡迎大家指正、補充。
From:MyAV討論區
(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(0) 人氣(274)

  • 個人分類:
▲top
  • 2月 26 週三 201410:07
  • 123456789

1台:1440度:4850元
2台:2880度:12313元(+2613)
3台:4320度:19917元(+5367)[+2754]
4台:5760度:27520元(+8120)[+2753]
5台:7200度:35123元(+10873)[+2753]
(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(0) 人氣(14)

  • 個人分類:
▲top
  • 1月 13 週一 201411:38
  • String.Format舉例(C#,VB.Net)


String.Format舉例(C#,VB.Net)
我自己在用到的:
String.Format("字符串:{0:d5}", 12)
"字符串:00012" '佔位5個,不足的用0代替
String.Format("字符串:{0,5}", 12)
"字符串:   12" '佔位5個,不足的用空格代替,右對齊
String.Format("字符串:{0,-5}", 12)
"字符串:12   " '佔位5個,不足的用空格代替,左對齊
String.Format("字符串:{0:#,0.0000}", 12)
"字符串:12.0000"
String.Format("字符串:{0:#0,0.00}", 12)
"字符串:12.00"
String.Format("字符串:{0:#0,0.00}", 12000)
"字符串:12,000.00"
String.Format("字符串:{0:D#0.0000}", 12)
"字符串:D12.0000"
String.Format("字符串:{0:D2.5}", 12)
"字符串:D2125"
String.Format("字符串:{0:D0.0}", 12)
"字符串:D12.0"
String.Format("字符串:{0:D0.0000}", 12)
"字符串:D12.0000"
String.Format("字符串:{0:#00,0.00}", 12000)
"字符串:12,000.00"
String.Format("字符串:{0:#00,0.00}", 12)
"字符串:012.00"
String.Format("字符串:{0:#00,0.00}", 1200)
"字符串:1,200.00"
String.Format("字符串:{0:#000.00}", 1200)
"字符串:1200.00"
String.Format("字符串:{0:#000.00}", 12)
"字符串:012.00"
String.Format("字符串:{0:#000.00}", 1)
"字符串:001.00"
格式字符  名稱  說明 
0
 零佔位符
 如 果格式化的值在格式字符串中出現「0」的位置有一個數字,則此數字被復制到輸出字符串中。小數點前最左邊的「0」的位置和小數點後最右邊的「0」的位置確 定總在輸出字符串中出現的數字范圍。「00」說明符使得值被舍入到小數點前最近的數字,其中零位總被舍去。例如,用「00」格式化 34.5 將得到值 35。
 
#
 數字佔位符
 如果格式化的值在格式字符串中出現「#」的位置有一個數字,則此數字被復制到輸出字符串中。否 則,輸出字符串中的此位置不存儲任何值。請注意,如果「0」不是有效數字,此說明符永不顯示「0」字符,即使「0」是字符串中唯一的數字。如果「0」是所 顯示的數字中的有效數字,則顯示「0」字符。「##」格式字符串使得值被舍入到小數點前最近的數字,其中零總被舍去。例如,用「##」格式化 34.5 將得到值 35。
 
.
 小數點
 格式字符串中的第一個「.」字符確定格式化的值中的小數點分隔符的位置;任何其他「.」字符被忽略。用作小數點分隔符的實際字符由控制格式化的 NumberFormatInfo 的 NumberDecimalSeparator 屬性確定。
 
,
 千位分隔符和數字比例換算
 「,」 字符有兩種用途。首先,如果格式字符串在小數點(如果有)左邊的兩個數字佔位符(0 或 #)之間包含「,」字符,則輸出將在小數點分隔符左邊的每三個數字之間插入千位分隔符。輸出字符串中用作小數點分隔符的實際字符由控制格式化的當前 NumberFormatInfo 的 NumberGroupSeparator 屬性確定。
其次,如果格式字符串在緊鄰小數點的左側包含一個或多個「,」字符,則數字在格式化之前將被「,」字符數除然後乘以 1000。例如,格式字符串「0,,」將 100,000,000 簡單表示為 100。使用「,」字符指示比例換算在格式化數字中不包括千位分隔符。因此,若要將數字縮小 1,000,000 倍並插入千位分隔符,應使用格式字符串「#,##0,,」。
 
%
 百分比佔位符
 在格式字符串中出現「%」字符將導致數字在格式化之前乘以 100。適當的符號插入到數字本身在格式字符串中出現「%」的位置。使用的百分比字符由當前的 NumberFormatInfo 類確定。
 

常用的:字符型轉換 轉為字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16進制)
12345.ToString("p"); //生成 1,234,500.00%
C# 格式化數值結果表(格式化字符串)
    C 貨幣 string.Format("{0:C3}", 2) $2.000
    D 十進制 string.Format("{0:D3}", 2) 002
    E 科學計數法 1.20E+001 1.20E+001
    G 常規 string.Format("{0:G}", 2) 2
    N 用分號隔開的數字 string.Format("{0:N}", 250000) 250,000.00
    X 十六進制 string.Format("{0:X000}", 12)  C
    string.Format("{0:000.000}", 12.2)  012.200
MSDN格式化概述:
http://msdn.microsoft.com/zh-cn/library/26etazsy.aspx
MSDN復合格式化:
http://msdn.microsoft.com/zh-cn/library/txafckwd.aspx
自定義數字格式字符串
http://msdn.microsoft.com/zh-cn/library/0c899ak8.aspx
補充內容:
來源: http://hi.baidu.com/wlx_sm/blog/item/d04b898b24bfe3d2fc1f1030.html
2007-04-13 10:01
stringstr1 =string.Format("{0:N1}",56789);                //result: 56,789.0
stringstr2 =string.Format("{0:N2}",56789);                //result: 56,789.00
stringstr3 =string.Format("{0:N3}",56789);                //result: 56,789.000
stringstr8 =string.Format("{0:F1}",56789);                //result: 56789.0
stringstr9 =string.Format("{0:F2}",56789);                //result: 56789.00
stringstr11 =(56789 / 100.0).ToString("#.##");            //result: 567.89
stringstr12 =(56789 / 100).ToString("#.##");              //result: 567
C 或 c
貨幣
Console.Write("{0:C}", 2.5);   //$2.50
Console.Write("{0:C}", -2.5); //($2.50)
D 或 d
十進制數
Console.Write("{0:D5}", 25);   //00025
E 或 e
科學型
Console.Write("{0:E}", 250000);   //2.500000E+005
F 或 f
固定點
Console.Write("{0:F2}", 25);   //25.00
Console.Write("{0:F0}", 25);   //25
G 或 g
常規
Console.Write("{0:G}", 2.5);   //2.5
N 或 n
數字
Console.Write("{0:N}", 2500000);   //2,500,000.00
X 或 x
十六進制
Console.Write("{0:X}", 250);   //FA
Console.Write("{0:X}", 0xffff);   //FFFF
 

------------------------
更多更詳細的內容:
www.yaosansi.com/post/360.html
http://blog.csdn.net/sunchaohuang/archive/2009/02/16/3894808.aspx
 
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/linjimu/archive/2009/04/18/4090575.aspx
(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(0) 人氣(11,078)

  • 個人分類:
▲top
  • 10月 03 週四 201313:39
  • 快速讀取、寫入檔案的方法

[C#]快速讀取、寫入檔案的方法
 
C#提供一些快速的Method可以直接寫入或是讀取檔案,善用的話可以節省一些時間
以下三個static methods只需要一個步驟就可把資料從檔案讀到記憶體中,傳入參數都是讀取檔案的路徑
(繼續閱讀...)
文章標籤

nineaddnine 發表在 痞客邦 留言(0) 人氣(2,131)

  • 個人分類:
▲top
«1234»

...

個人資訊

nineaddnine
暱稱:
nineaddnine
分類:
不設分類
好友:
累積中
地區:

熱門文章

  • (11,078)String.Format舉例(C#,VB.Net)
  • (3,625)VB6 檔案讀寫操作
  • (3,567)VB.NET 讀取文字檔,並依分隔符號將每個欄位值放入陣列
  • (3,436)VB讀取文字檔的方法(使用FileSystemObject)
  • (2,740)用VB.NET實現多執行緒
  • (2,417)VB6 FM20.dll 物件程式庫尚未註冊 Win7 問題解決
  • (1,832)[VB.NET][C#.NET] Windows Form /控制項 事件 的 先後順序 / 事件方法覆寫
  • (1,727)SendMessage函數
  • (524)BCB資料夾與檔案搜尋與處理
  • (67)bcb設定成獨立可執行檔

文章分類

  • 程式 (8)
  • 未分類文章 (1)

最新文章

  • [VB.Net]取得電腦基本訊息(含偵測網路是否有通)
  • FTP Client Library VB.NET
  • 表單啟動即隱藏
  • StringBuilder串接字串的迷思
  • StringBuilder
  • VB進位法是用"四捨六入五成雙"→小數點第一位>=5時,如果整數部分的個位數為奇數則會進位,如果為偶數則不會進位
  • 常用ASCII CHR碼對照
  • vb.net限制輸入數字並只到小數點後2位
  • BCB的字串替換
  • 個人感覺 台中 中部 設計師 水電 泥作 窗戶 木工 感想 (待續

最新留言

  • [20/03/04] wangtenghong 於文章「[VB.NET][C#.NET] Win...」留言:
    很有用的參考資料 但我在VB2010環境實驗時發現Cont...
  • [16/04/13] 趙家宏 於文章「VB6 FM20.dll 物件程式庫尚未...」留言:
    您好 找不到您所說的這三個檔案的下載連結 可以麻煩您...
  • [15/12/10] bis4044 於文章「VB6 FM20.dll 物件程式庫尚未...」留言:
    您好 找不到您所說的這三個檔案的下載連結 可以麻煩您...
  • [15/04/04] Thomas Kuo 於文章「VB6 FM20.dll 物件程式庫尚未...」留言:
    您好 找不到您已上傳這三個檔案的下載連結 可以麻煩您再給...

動態訂閱

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣: