發表文章

目前顯示的是 7月, 2020的文章

C#利用DateTime估計程式執行時間

之前,常常用Timer來做這件事! 而Timer在C#有三種可以用! 搞得超複雜的! 後來看VB6有些是直接用Timer來相減。找了資訊也看到C#有類似的作法。參考 https://mike2014mike.github.io/c%23/2018/08/02/csharp-time-delta/ DateTime startT = DateTime.Now; //在程式執行前先定錨一個時間點 // 你的程式段開始 // ...... // 你的程式段結束 DateTime endT = DateTime.Now; //程式結束後再定一個時間點 TimeSpan dt = endT - startT; //用TimeSpan取得時間差 string str1 = dt.TotalMilliseconds.ToString(); //看你要取的時間差的時間單位 為了怕參考網址哪天內容不見了! 所以,自己記錄一下作法囉!

獲取C#給定對象的控制項Array的Index

圖片
這邊文基本上參考 https://www.coder.work/article/3058479 參考的文章寫的也挺清楚的! 我個人用到不少的控制項Array, 控制項操作共通性高, 所以事件處理常常合併處理! 那麼取得是哪個控制項觸發事件的就很重要!  如下圖:  選項勾選要記錄哪項動了!  參考了別人的作法,發現用lambda function或是Tag應該都可以。大約程式如下:  private void TestOption_Load(object sender, EventArgs e) { chkColorOption = new CheckBox[] { chkRed, chkGreen, chkBlue, chkGrey, chkWhite, chkBlack, chkFlash }; btnSaveSetting.Enabled = false; for (int i = 0; i < chkColorOption.Length; i++) { int index = i; //注意, 此項必須加! //不然對應的delegate參數index會變成7 this.chkColorOption[i].Checked = flagColorOption[i]; this.chkColorOption[i].Tag = i; //此方法取得index其實也可以 ---- //this.chkColorOption[i].CheckedChanged += new System.EventHandler(this.chkColorOption_CheckedChanged); //傳統delegate宣告方式 this.chkColorOption[i].CheckedChanged += (s, e2) => chkColorOption_CheckedChanged(index, s, e2); //採用la

C#取得控制項絕對位置

圖片
我偶爾會寫些設備類用的程式。一般會捨棄掉鍵盤的使用,如果使用了觸摸式的螢幕,甚至會不用滑鼠。那麼輸入數字或是某些字就會用虛擬的鍵盤。那麼這虛擬的鍵盤跳出來的位置我設定的就要在要輸入的TextBox的右下角。如果太邊緣,可能要在左上、左下、右上角落。不管怎樣,都必須知道我的TextBox的絕對位置。因為我的虛擬鍵盤等於是開新的Frame。如何取得呢? 如下程式: private void txtExp_Click(object sender, EventArgs e) { Point p = ((TextBox)sender).PointToClient(new Point(0, 0)); KeyPad kp = new KeyPad(false, true); kp.Left = -p.X + ((TextBox)sender).Width; kp.Top = -p.Y + ((TextBox)sender).Height; kp.ShowDialog(); if (!kp.cancel) ((TextBox)sender).Text = kp.numResult.ToString(); } 這裡面的Point p會得到相反的負值。結果,如下圖: