int intNum = _ttoi(strGetNum);//CString 轉 int
2014年8月28日 星期四
2014年8月24日 星期日
MFC 字串切割
//======================================== //mapKey、*liAtkIP為一組IP+Port //將port移除只保留IP char szBuf[100]; char mapKeyIP[100]; const char *del = ":"; strcpy(szBuf, (LPCTSTR)*liAtkIP); *liAtkIP = strtok( szBuf, del); strcpy(mapKeyIP, (LPCTSTR)mapKey); mapKey = strtok( szBuf, del); //=========================================
2014年8月20日 星期三
JavaScript 兩個select透過js互相對應改變選取項目
function changeSelectIndex(selectID, changeID){ //取得被改變的select元件 var selectDOC = document.getElementById(selectID); //取得另一個要被改變的select元件 var changeDOC = document.getElementById(changeID); //取得被改變的select的value (必須給index) var selectValue = selectDOC.value; //改變另一個select的選取index changeDOC.selectedIndex = selectValue; }
JavaScript 使用<input>呈現與切換圖片
在html的部分宣告方式如下,將input宣告為image的型態,注意input預設滑鼠移入會變成可以點擊的手型
<input type="image" id="status1" src="images/ONbutton.jpg" value='1' onClick="ChangeImage(this.id);" />在 onClick="ChangeImage(this.id);" 傳入的參數為自身元件的ID,然後我們可以在function中透過ID操作該元件
//透過ID找到元件,就可以變更src、value等屬性,也可以利用value判斷要執行什麼動作 function ChangeImage(id){ var str = document.getElementById(id); if(str.value == 1){ str.src = "../../images/OFFbutton.jpg"; str.value = 2; }else if(str.value == 2){ str.src = "../../images/ONbutton.jpg"; str.value = 1; } }
JavaScript 修改、移除td
有空再整理
HTML:
<tr> <td><input style="display:none" id="1_fields1" type="text" value="" size="12" /><span id="1_mySapns1">RulesName1</span></td> <td><input style="display:none" id="1_fields2" type="text" value="" size="10" /><span id="1_mySapns2">59.118.67.104</span></td> <td><input style="display:none" id="1_fields3" type="text" value="" size="10" /><span id="1_mySapns3">120.58.164.22</span></td> <td><input style="display:none" id="1_fields4" type="text" value="" size="10" /><span id="1_mySapns4">XP_REG, UNION SELECT, ‘;DROR</span></td> <td><input style="display:none" id="1_fields5" type="text" value="" size="10" /><span id="1_mySapns5">SYSTEM21, CMD.EXE</span></td> <td><input style="display:none" id="1_fields6" type="text" value="" size="10" /><span id="1_mySapns6">GET, POST, HEAD, COPY, POLL</span></td> <td><input style="display:none" id="1_fields7" type="text" value="" size="10" /><span id="1_mySapns7">Directory Traversal Exploits in URL, Directory Traversal Exploits in Query</span></td> <td><input style="display:none" id="1_fields8" type="text" value="" size="10" /><span id="1_mySapns8">Encoding Abuse Exploits in URL, Encoding Abuse Exploits in Query String, Encoding Abuse Exploits in Post Data</span></td> <td><input style="display:none" id="1_fields9" type="text" value="" size="10" /><span id="1_mySapns9">Maximum URL Length Allowed</span></td> <td><input style="display:none" id="1_fields10" type="text" value="" size="10" /><span id="1_mySapns10">High Bit Shellcode Protection in Post Data, High Bit Shellcode Protection in Header</span></td> <td style="text-align:center"> <span id="1_ModifySpan1" style="display:block"><input type="button" value="修改" onClick="modify('1_ModifySpan', '1_fields', '1_mySapns');"></span> <span id="1_ModifySpan2" style="display:none"><input type="button" value="確認" onClick="modify('1_ModifySpan', '1_fields', '1_mySapns');"></span> </td> <td style="text-align:center"><input type="button" value="刪除" onClick="deleteRow(1);"></td> </tr>JavaScript:
<script> var rowsTotal = 0; function modify(id, inputsID, spansID){ //取得btn ID var btn1 = document.getElementById(id + '1'); var btn2 = document.getElementById(id + '2'); if(btn1.style.display == 'block'){ btn1.style.display = 'none'; btn2.style.display = 'block'; for(var i=1 ; i<11 ; i++){ var spans = document.getElementById(spansID + i); var fields = document.getElementById(inputsID + i); var strInner = document.getElementById(spansID + i).innerHTML; spans.innerHTML = ''; fields.value = strInner; fields.style.display = 'block'; } }else{ btn1.style.display = 'block'; btn2.style.display = 'none'; for(var i=1 ; i<11 ; i++){ var spans = document.getElementById(spansID + i); var fields = document.getElementById(inputsID + i); var strInner = fields.value; spans.innerHTML = strInner; fields.value = ''; fields.style.display = 'none'; } } } //function end function deleteRow(RowNum){ //取得目前td數量 var num = document.getElementById("myTable").rows.length; if(rowsTotal == 0) rowsTotal = num; var num2 = rowsTotal - num; if(RowNum - num2 == 0){ document.getElementById("myTable").deleteRow((RowNum)); }else{ document.getElementById("myTable").deleteRow((RowNum - num2)); } } </script>
CSS 位置 position: absolute 、relative、fixed
在 CSS 中的 position 屬性預設為 static 其結果如下圖:
以絕對位置 (position: absolute) 而言,故名思義,它是以父元素的邊界為絕對起點。
例如如果我們設定 top: 50px ,那麼這個元素就會在距離父元素內容區上邊界 50px 的地方呈現,如下圖:
補充:如果父元素的 position 不是 absolute 或 relative 時,那麼元素的位置就會再對應到父元素的上層元素;
如果其親代元素的 position 都沒有設定 absolute 或 relative 時,就以螢幕視窗最大可視範圍邊界為基準。
而以相關位置 (position: relative) 而言,其意義就是相對於原本的位置。例如我們指定 top: 50px 時,
那麼這個元素就會從原本應該呈現的位置往下移動 50px 。如下圖,紅色虛線部份就是未設定 position: relative 前,元素原該應該在的位置:
那麼這個元素就會從原本應該呈現的位置往下移動 50px 。如下圖,紅色虛線部份就是未設定 position: relative 前,元素原該應該在的位置:
而固定位置 (position: fixed) 指的就是固定在螢幕視窗最大可視範圍上,如果不指定位置 (top, left, right, bottom) 時,那元素就會固定在原本的位置;
而指定位置後,就會以螢幕視窗最大可視範圍的邊界為絕對基準點。如果頁面內容超過螢幕視窗最大可視範圍大小時,
那麼不論我們如何捲動頁面,元素都會固定在螢幕視窗最大可視範圍上我們所指定的位置。
而指定位置後,就會以螢幕視窗最大可視範圍的邊界為絕對基準點。如果頁面內容超過螢幕視窗最大可視範圍大小時,
那麼不論我們如何捲動頁面,元素都會固定在螢幕視窗最大可視範圍上我們所指定的位置。
===========================================================================================
以下為position:fixed(不受捲軸影響的絕對位置)範例html程式碼,雖然很醜不過看得懂就好0.0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文件</title> <style type="text/css"> body{ pdding: 0; margin: 0; } #container { background-color: #000; width: 100%; float: left; height: 1600px; position: relative; } #test2 { background-color: #0F0; position:fixed; top: 0; left: 0; height: 750px; width: 25%; } #test1 { float: left; width: 30%; height: 800px; background-color: #CCC; } </style> </head> <body> <div id="container"> <div id="test1"> id "test1" 的內容放在這裡</div> <div id="test2"> id "test2" 的內容放在這裡</div> </div> </body> </html>
CSS 子元素選擇器[>]
以下示範子元素選擇器[>]使用方法,子元素選擇器不會影響孫元素
<style type="text/css"> //css one .div1 > p { color: #F00; } //css two .div2 p { color: #F00; } </style> <!-- css one 只會影響div1內的p(子元素),但不會影響span內的p(孫元素) --> <div class="div1"> <p>test</p> <span> <p>test</p> </span> </div> <!-- css two 會影響所有div2內的p --> <div class="div2"> <p>test</p> <span> <p>test</p> </span> </div>
JavaScript 增加、刪除 table 內的 td
如果需要利用程式來增加Table內的tr、td等內容
<table id="myTable"> <tr> <td>Row1 cell1</td> <td>Row1 cell2</td> </tr> <tr> <td>Row2 cell1</td> <td>Row2 cell2</td> </tr> <tr> <td>Row3 cell1</td> <td>Row3 cell2</td> </tr> </table>
JavaScript寫法:
增加:
function myFunction(){ //取得table元件 var table = document.getElementById("myTable"); //取的目前有的td數量 var num = document.getElementById("myTable").rows.length; //從最後一筆開始加入 var row = table.insertRow(num); //因為有兩個欄位 所以新增兩筆 var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); //最後將兩筆的資料寫入 cell1.innerHTML = "NEW CELL0"; cell2.innerHTML = "NEW CELL2"; }
刪除:
function remove_data() { //先取得目前的row數 var num = document.getElementById("mytable").rows.length; //防止把標題跟原本的第一個刪除XD if(num >2){ //刪除最後一個 document.getElementById("mytable").deleteRow(-1); } }
C# 讀取分類檔
檔案格式為
[業務部]
IP=10.8.210.66
IP=10.8.210.67
[行政部]
IP=192.168.12.11
IP=192.168.12.12
[財務部]
IP=192.168.12.13
IP=192.168.12.14
=======================================================================================================
以下程式為自訂函式 public static Hashtable BuildSortList() 執行完畢會回傳一個
Hashtable,裡面會放N個 List,N=分類檔的部門數量
每個List 裡會放N個IP,N=部門底下的IP數量
===============================================================================
//讀取分類檔 //執行完畢會回傳一個 Hashtable,裡面會放N個 List,N=分類檔的部門數量 //每個List 裡會放N個IP,N=部門底下的IP數量 public static Hashtable BuildSortList() { //部門名稱清單 SortStruct ss = new SortStruct(); ss.sortNameList = new List(); ipss.IPtoSortHT = new Hashtable(); List sort = new List(); //用來放sort List Hashtable ht = new Hashtable(); String strLine; //分類數量 int sortCount = 0; string strName; //群組名稱陣列 string[] sortName; //開啟檔案 C:\ StreamReader sr = new StreamReader(@"D:\\DVM2\\Source\\DVM2SingleReport\\CrystalReportsApplicationTest\\bin\Report\\SortList.txt"); //判斷有幾個分類 StreamReader sr2 = new StreamReader(@"D:\\DVM2\\Source\\DVM2SingleReport\\CrystalReportsApplicationTest\\bin\Report\\SortList.txt"); //幾號部門 int sortNumber = -1; int sortNumber2 = -1; //讀取到一次"[",sortCount就+1 while ((strLine = sr2.ReadLine()) != null) { strName = ""; int iTitle = -1; iTitle = strLine.IndexOf("[", StringComparison.CurrentCultureIgnoreCase); if (iTitle >= 0) { sortCount++; //讀取到"["開頭時將兩邊做切割,取中間文字 sortName = strLine.Split(new char[2] {'[', ']'}); foreach(string s in sortName) { strName += s; } //將部門名稱放入List ss.sortNameList.Add(strName); } } //部門數量 > 0 才開始讀檔 if (sortCount > 0) { //讀一行 while ((strLine = sr.ReadLine()) != null) { //所在位置 int iPos = strLine.IndexOf("="); //string[] strLines = strLine.Split('='); string strKey = string.Empty; string strValue = string.Empty; // 如果有出現 "=" 才可以切割欄位 if (iPos > 0) { strKey = strLine.Substring(0, iPos).Trim(); strValue = strLine.Substring(iPos + 1).Trim(); } //判斷目前這行是什麼部門 for (int i = 0; i < sortCount; i++) { int iTitle = strLine.IndexOf("[", StringComparison.CurrentCultureIgnoreCase); //判斷是否讀取到新的部門 if (iTitle > -1) { sortNumber2++; if (sortNumber2 == 0) break; } if (sortNumber2 > 0 && iTitle > -1) { sortNumber = i; //將上一個讀取完的部門儲存 if (sortNumber >= 0) ht.Add(ss.sortNameList[sortNumber2-1], sort); //if (sortNumber > 0) ht.Add("sort" + i, sort); //讀取新的部門就重新new一個List sort = new List(); break; } } //將讀取到的IP或電腦名稱加入List switch (strKey) { case "IP": sort.Add(strValue); ipss.IPtoSortHT.Add(strValue.ToString().Trim(), ss.sortNameList[sortNumber2]); break; case "Host": sort.Add(strValue); break; } } //如果只有一個部門 if (sortCount == 1) { ht.Add(ss.sortNameList[0], sort); return ht; } } //將最後一個部門加入List ht.Add(ss.sortNameList[sortCount-1], sort); return ht; }
C# StreamReader 讀文字檔的編碼
//不指定使用何種編碼讀取文字,預設為Unicode StreamReader sr = new StreamReader(@"C:\\Test.txt"); //使用系統預設的編碼格式,如Windows為ANSI,Linux為UTF-8 StreamReader sr = new StreamReader(@"C:\\Test.txt", System.Text.Encoding.Default); //使用指定的編碼格是讀取文字檔 StreamReader sr = new StreamReader(@"C:\\Test.txt", System.Text.Encoding.GetEncoding("Big5"));
C# 利用Hashtable 存放N個List
當需要使用多個List存放資料,且List的數量為動態增減的話
可用Hashtable存放所有的List
using System.Collections; class MyClass { static void Main(string[] args){ Hashtable ht = new Hashtable(); //C#的List強制使用泛型 Listlist1 = new List (); List list2 = new List (); List list3 = new List (); //Key為自訂名稱 ht.add("list1".list1); ht.add("list2".list2); ht.add("list2".list3); foreach (DictionaryEntry item in ht) { //第N圈迴圈,MyList就會取得第N個 list List MyList = (List )item.Value; } }//Main end }
C# 利用SessionID驗證是否為登入狀態
//在認證帳號密碼後,先將SessionID儲存 Session.Add("ID", Session.SessionID); //執行其他程式時的判斷式 Boolean AuthorityCheck() { string strSessionID; if (Session["ID"] != null) { //取得登入時的SesssionID strSessionID = Session["ID"].ToString().Trim(); //判斷當前SessionID與登入SessionID是否相等 if (strSessionID.CompareTo(Session.SessionID) == 0){ return true; }else{ return false; } }else{ return false; } }
ASP.NET 搭配 Bootstrap3 on VS2012
於VS2012內:
「工具 > 擴充功能和更新」,在「擴充功能與更新」裡查詢 Bootstrap3 For Mvc4,下載並安裝「Bootstrap3 For Mvc4」
安裝完成後即新增專案,如果遇到下圖
則在VS2012內 「工具 > 程式套件管理員 > Package Manager Console」
PM> Install-Package Newtonsoft.Json -Version 4.5.11
PM> Install-Package Microsoft.AspNet.Razor -Version 2.0.20715
PM> Install-Package Microsoft.AspNet.Mvc.FixedDisplayModes -Version 1.0.0
PM> Install-Package Microsoft.AspNet.Razor -Version 2.0.20715
PM> Install-Package Microsoft.AspNet.Mvc.FixedDisplayModes -Version 1.0.0
然後執行
如果又出現
'WebGrease, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
錯誤訊息
則輸入
PM> Install-Package Microsoft.AspNet.Web.Optimization
PM> Update-Package WebGrease
PM> Uninstall-Package Microsoft.AspNet.Web.Optimization
PM> Uninstall-Package WebGrease
PM> Install-Package Microsoft.AspNet.Web.Optimization
PM> Update-Package WebGrease
PM> Update-Package WebGrease
PM> Uninstall-Package Microsoft.AspNet.Web.Optimization
PM> Uninstall-Package WebGrease
PM> Install-Package Microsoft.AspNet.Web.Optimization
PM> Update-Package WebGrease
然後執行,成功結果如下圖:
ASP.NET 解決 alert 影響 CSS
不要使用
Response.Write("<script>alert('message')</script>");
改用
ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('message')</script>");
即可解決
ASP.NET ListBox 左右移動 C#
<asp:Button ID="btMoveRight" runat="server" Text=" >> " OnClick="btMoveRight_Click" /> <asp:Button ID="btMoveLeft" runat="server" Text=" << " OnClick="btMoveLeft_Click" /> // 右移按鍵的函式 protected void btMoveRight_Click(object sender, EventArgs e) { // 將所選到的項目新增至lbGroupUser for (int i = 0; i < lbNotGroupUser.Items.Count; i++) { if (lbNotGroupUser.Items[i].Selected) { lbGroupUser.Items.Add(lbNotGroupUser.Items[i]); lbNotGroupUser.Items.RemoveAt(i); i--; } } lbGroupUser.ClearSelection(); } //左移按鍵的函式 protected void btMoveLeft_Click(object sender, EventArgs e) { // 將所選到的項目新增至lbNotGroupUser for (int i = 0; i < lbGroupUser.Items.Count; i++) { if (lbGroupUser.Items[i].Selected) { lbNotGroupUser.Items.Add(lbGroupUser.Items[i]); lbGroupUser.Items.RemoveAt(i); i--; } } lbNotGroupUser.ClearSelection(); }
HTML 同網頁內的跳轉
假設網頁內有一段section:
可透過<a href=#"contents">go to contents </a> 讓網頁連結至該section頂部(不會換頁)<section id="contents"> <div class="page-header"> <h1>3. 含有什麼</h1> </div> <p class="lead">Bootstrap 中的 HTML、CSS 和 JS 適合各種設備,不過,它們可以被簡單分類成幾個類別,可以參考本文件頂部的巡覽列。</p> <h2>文件章節</h2> <h4><a href="/Bootstrap/Scaffolding">架構</a></h4> <p>body元素的全域樣式,用於重設背景、連結樣式、網格系統和兩個簡單佈局結構。</p> <h4><a href="/Bootstrap/BaseCSS">基礎CSS</a></h4> <p>常見HTML元素,像是佈局、程式碼、表格、表單和按鈕。還包含 <a href="http://glyphicons.com">Glyphicons</a>。一個非常優秀的icon圖集。</p> <h4><a href="/Bootstrap/Components">元件</a></h4> <p>常見介面元件,像是標簽、pill、巡覽、警告、頁面標頭等。</p> <h4><a href="/Bootstrap/JavaScript">JavaScript</a></h4> <p>和元件類似,這些JavaScript外掛用以實現如提示(tooltip)、彈出視窗(popover)、對話視窗(modal)等具互動性的元件。</p> <h2>元件清單</h2> <p><strong>元件庫</strong>和<strong>JavaScript外掛庫</strong>提供以下介面元素。</p> <ul> <li>按鈕群組</li> <li>按鈕下拉選單</li> <li>巡覽標籤、pill、清單</li> <li>巡覽列</li> <li>標籤</li> <li>徽章</li> <li>頁面標題和 hero unit</li> <li>縮圖</li> <li>警告視窗</li> <li>進度列</li> <li>對話視窗</li> <li>下接式選單</li> <li>工具提示</li> <li>彈出視窗</li> <li>手風琴樣式</li> <li>輪播</li> <li>排版</li> </ul> <p>接下來的介紹中,我們會每一個的詳細介紹。在此之前,先看看如何使用且客製它們。</p> </div> </section>
2014年8月17日 星期日
JSON:巢狀範例
//第一個JSON var person2 = { id : 1234, name : "joyce " }; //第二個JSON var person = { firstName: "John", lastName : "Doe", id : person2 , //取得第一個JSON getId : function() { return this.id }, fullName : function(){return this.firstName + " " + this.lastName} }; //透過第二個JSON取得第一個JSON的某個value document.getElementById("demo").innerHTML = person.id.id ;
訂閱:
文章 (Atom)