//是否可以打開新進程 bool newApp; //獲取程式集Guid作為唯一標識 Attribute flag = Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(GuidAttribute)); string guid = ((GuidAttribute)flag).Value; _mutex = new System.Threading.Mutex(true, guid, out newApp); if (false == newApp) { //發現重複進程 MessageBox.Show("應用系統不可重複開啟!"); return; } _mutex.ReleaseMutex();
2016年2月25日 星期四
C# Winform 只能執行一個應用程式 不可重複
避免應用程式重複執行。
在Program.cs 的static void Main()加入此段
2016年2月18日 星期四
Javascript 跑馬燈 Marquee 2種方法 (ex. 讀取中, 請稍候...)
方法1
( for IE only )
javascript 內容
var it=0 function initialize(){ mytext=typing.innerText var myheight=typing.offsetHeight typing.innerText='' document.all.typing.style.height=myheight typeit() } function typeit(){ typing.insertAdjacentText("beforeEnd",mytext.charAt(it)) if (it < mytext.length - 1) { it++ setTimeout("typeit()",100) } return } if (document.all) document.body.onload=initializehtml部份如下:
< SPAN id=typing style="FONT-SIZE: 18pt; COLOR: #1A61A9; FONT-FAMILY: 新細明體; LETTER-SPACING: 2pt">讀取中, 請稍候‥‥‥‥‥‥< /SPAN>方法2 ( for IE CHROME FIREFOX ) javascript 內容
var text = "讀取PNR中, 請稍候‥‥‥‥‥‥"; var delay=50; var currentChar=1; var destination="[not defined]"; function type() { if (document.getElementById) { var dest=document.getElementById(destination); if (dest)// && dest.innerHTML) { dest.innerHTML=text.substr(0, currentChar); //dest.innerHTML+=text[currentChar-1]; currentChar++ if (currentChar>text.length) { currentChar=1; setTimeout("type()", 5000); } else { setTimeout("type()", delay); } } } } function startTyping(textParam, delayParam, destinationParam) { text=textParam; delay=delayParam; currentChar=1; destination=destinationParam; type(); }html部份如下:
< body onload="startTyping(text, 50, 'textDestination');">...< /body>
2016年2月17日 星期三
C# 獲取客戶端主機位址 (真實ip 或代理 ip)
if (HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null) { ClientIP = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; //取得真實用戶端的IP } else { ClientIP = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; //取得用戶端的IP(有可能為代理伺服器) }
2016年2月3日 星期三
Nujabes luv sic
寫程式的時後我會專注某一首歌曲,
從早天到晚反覆聽直到下班。
Nuhabes 我寫程式的好夥伴,
所製作的 jazz hip-hop 節奏旋律細膩易共鳴,
清新雋永值得一聽再聽,
從素人唱片行店員到知名DJ的音樂生涯更具故事性。
可惜
因車禍意外過世..........傳奇的結尾也是傳奇。
Nujabes luv sic part 1 - 6 愛情的所有階段我想都包含在內了。
C# Asp.net 利用 winform 控制 web server 記憶體
目前被指派寫一個winform常駐程式,
比對資料庫資料和call總部webservice的回傳值是否有異,
若有則更新資料庫資料。
原本以為定時比對利用timer跑個迴圈比對就沒事了,
結果更新完資料庫資料後,
發現台灣local這邊的網站顯示資料卻沒有更新!!!
Orz....
細查發現公司webform應用程式顯示資料時,
是先看伺服器記憶體中(global.asax記錄了定期更新的資料及最後updatedTime)有無暫存資料,
若有就直接讀取不再浪費連線效能,
因此我的常駐程式勢必得想辦法重新啟動伺服器記憶體或修改global.asax的最後updatedTime,
想了老半天才發現原來方法沒那麼複雜........想太多.........
在公司webform應用程式中寫一段webserive用來更新global.asax的updatedTime
(公司是設定一個月前的舊資料就連線資料庫撈資料,再將最新資料儲存伺服器記憶體內),
然後我的常駐winform呼叫此webservice修改updatedTime就可以達成我想要的目的,
就這麼簡單,
程式碼三行完成需求......但這三行卻浪費我想一天,果然太嫩...。
比對資料庫資料和call總部webservice的回傳值是否有異,
若有則更新資料庫資料。
原本以為定時比對利用timer跑個迴圈比對就沒事了,
結果更新完資料庫資料後,
發現台灣local這邊的網站顯示資料卻沒有更新!!!
Orz....
細查發現公司webform應用程式顯示資料時,
是先看伺服器記憶體中(global.asax記錄了定期更新的資料及最後updatedTime)有無暫存資料,
若有就直接讀取不再浪費連線效能,
因此我的常駐程式勢必得想辦法重新啟動伺服器記憶體或修改global.asax的最後updatedTime,
想了老半天才發現原來方法沒那麼複雜........想太多.........
在公司webform應用程式中寫一段webserive用來更新global.asax的updatedTime
(公司是設定一個月前的舊資料就連線資料庫撈資料,再將最新資料儲存伺服器記憶體內),
然後我的常駐winform呼叫此webservice修改updatedTime就可以達成我想要的目的,
就這麼簡單,
程式碼三行完成需求......但這三行卻浪費我想一天,果然太嫩...。
[WebMethod(EnableSession = true)] public void changeUpdateTime() { HttpContext.Current.Application.Lock(); Global.dictionaryDom.lastUpdateTime = DateTime.Now.AddYears(-5); HttpContext.Current.Application.UnLock(); }
C# Datatable 尋找 row的index
datatblle讀取xml資料綁定datagridview,
預設有做篩選資料,
由於無用自動繫結datagridview
刪除資料或修改後反而找不到對應的index,
因此不得不用下面方法,
謹記
//找出要修改的資料 DataRow[] dr = dt.Select("code='123'"); //取得要修改的指標 int index = dt.Rows.IndexOf(dr[0]);
C# winform datagridview 增加全選功能
datagridview加上全選功能,
網路大神的寫法,
紀錄並學習。
初始化時加入
網路大神的寫法,
紀錄並學習。
初始化時加入
public Form1()
{
InitializeComponent();
//加入全選
ckeckboxSelectAll .dgv = dataGridView1;
ckeckboxSelectAll .AddSelectAllcheckbox();
}
cb.Location 調整參數到指定位置
public class ckeckboxSelectAll
{
public static System.Windows.Forms.DataGridView dgv;
public static void AddSelectAllcheckbox()
{
System.Windows.Forms.CheckBox cb= new System.Windows.Forms.CheckBox();
cb.Text = "";
cb.Checked = false;
System.Drawing.Rectangle rect = dgv.GetCellDisplayRectangle(0, -1, true);
cb.Size = new System.Drawing.Size(13, 13);
cb.Location = new Point(rect.Location.X + dgv.Columns[0].Width - 55, rect.Location.Y + 3);
cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
dgv.Controls.Add(cb);
}
static void cb_CheckedChanged(object sender, EventArgs e)
{
for (int i = 0; i < dgv.Rows.Count; i++)
{
dgv.Rows[i].Cells[0].Value = ((System.Windows.Forms.CheckBox)sender).Checked;
}
dgv.EndEdit();
}
}
訂閱:
文章 (Atom)