2020年12月20日 星期日

傳送E-MAIL通知

先到以下網址:

  https://www.google.com/settings/security/lesssecureapps

低安全性應用程式 → 開啟較低的應用程式存取權限

引用
using System.Net.Mail;

        private void SendMail(string account)
        {
            try
            {
                MailMessage msg = new MailMessage();
                msg.To.Add("account@gmail.com");    //收件人

                msg.From = new MailAddress("account@gmail.com", "Kaisudo", Encoding.UTF8);
                msg.Subject = "申請密碼";    //信件標題
                msg.Body = "帳號:" + account + "申請";    //信件內容
                msg.BodyEncoding = Encoding.UTF8;
                msg.IsBodyHtml = true;

                SmtpClient client = new SmtpClient();
                client.Credentials = new System.Net.NetworkCredential("account@gmail.com", "Password");
                client.Host = "smtp.gmail.com";
                client.Port = 25;
                client.EnableSsl = true;
                client.Send(msg);
                client.Dispose();
                msg.Dispose();
            }
            catch(Exception ex)
            {
                MessageBox.Show(this, ex.Message);
            }
        }

2020年10月3日 星期六

掛載USB裝置

 1.尋找USB裝置

lsblk

2.確認USB裝置

sudo fdisk -l

3.建立掛載usb用的資料夾(一次就好)

mkdir /mnt/usb

4.掛載USB裝置到3的資料夾

sudo mount /dev/sda1 /mnt/usb

※我的USB裝置為sda1,可從1或2步驟確認


1.卸載USB裝置

sudo umount /dev/sda1

※如果顯示busy則可以用以下指令確認是誰在使用

fuser -m mnt/usb

再利用以下指令釋放占用程式

fuser -m -v -i -k /mnt/usb

查看開關機時間

 last reboot

查看最近的開關機時間



ufw防火牆使用

0.安裝ufw功能

sudo apt-get install ufw

1.開啟ufw防火牆功能

sudo ufw enable

2.允許特定IP進入

sudo ufw allow from [ip]

※allow改deny則是不允許

3.允許接聽特定port

sudo ufw allow [port]

例如1433.1434.22,不建議開這個,直接允許特定IP就好

※allow改deny則是不允許

4.ufw預設規則

sudo ufw default deny

這樣除了上面的允許名單外通通封鎖

※deny改allow則是全開

5.查看ufw規則

sudo ufw status numbered

6.不滿意上面規則則可刪除

sudo ufw delete [number]

number為5的編號

Linux 自動開關機

自動關機

sudo vi /etc/crontab

新增 

00 22 * * * root /sbin/shutdown -h -now

每天晚上22:00自動關機


自動開機,利用主機板A300

定時每天8:30開機

但因為主機板跟UCT+0的關係,所以要-8小時

要設定00:30才會在台灣時間08:30開機

2020年9月25日 星期五

視窗最小化恢復後可以執行特定作業

 利用Form的Resize事件


if (this.WindowState == FormWindowState.Normal )

{

    Textbox1.focus();        //恢復視窗後的事件

}

2020年7月7日 星期二

抓取對外IP

using System.Net

            WebClient webClient = new WebClient();
            string publicIp = webClient.DownloadString("https://api.ipify.org");

要傳資料給其他網站,才由其他網站回傳資訊回來

2020年6月16日 星期二

textbox只允許輸入數字和刪除鍵

OnKeyPress事件

            if (e.KeyChar != 8 && !char.IsDigit(e.KeyChar))         //只允許輸入數字或刪除鍵
            {
                e.Handled = true;
            }

2020年5月20日 星期三

Form2控制Form1的物件

父窗體Form1建出Form2的時候要把自己傳進去

Form2 f2 = new Form2(this);

在Form2中宣告一個Form1,這樣創建的時候就會得到Form1的參數

Form1 form1;

        public Form2(Form1 form1)
        {
            InitializeComponent();
            this.form1 = form1;
        }

2020年4月13日 星期一

PANEL框線顏色更改

        private void panel3_Paint(object sender, PaintEventArgs e)
        {
            ControlPaint.DrawBorder(e.Graphics, panel3.ClientRectangle, Color.White, ButtonBorderStyle.Solid);
        }

panel3重繪,顏色改白色

2020年4月9日 星期四

移動到按鈕上顯示提示文字

先寫成method
        private void HINT(string tips, Button btn)
        {
            ToolTip tools = new ToolTip();
            tools.AutoPopDelay = 5000;                  //顯示多少毫秒
            tools.InitialDelay = 500;                        //停頓多少毫秒後顯示
            tools.SetToolTip(btn, tips);                   //要在哪裡出現,顯示內容
        }

然後在button1的onMouseHover事件寫下

        private void button1_MouseHover(object sender, EventArgs e)
        {
            HINT("關閉視窗", button1);
        }

無邊界模式下可按工具列按鈕直接最小化的方法

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.Style |= WS_MINIMIZEBOX;
                cp.ClassStyle |= CS_DBLCLKS;
                return cp;
            }
        }

放入Form中

2020年4月8日 星期三

在WINFORM上利用BUTTON切換PANEL

例如在PANEL1上要切換成子視窗FORM2和FORM3

為了檢查不重複產生子視窗,所以先用全域變數宣告在前面

 private static Form F2;
 private static Form F3;


無框體FORM拖曳事件

我是在PANEL1才能拖曳

        bool beginMove = false;         //開關拖曳功能
        Point mouseXY;    //紀錄滑鼠座標

        private void panel1_MouseUp(object sender, MouseEventArgs e)
        {
            beginMove = false;
            Cursor = Cursors.Default;
        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if(beginMove)
            {
                Left += e.X - mouseXY.X;        //移動XY軸位置
                Top += e.Y - mouseXY.Y;
            }
        }

        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            mouseXY = new Point(e.X, e.Y);      //紀錄現在的座標
            beginMove = true;
            Cursor = Cursors.Hand;              //更改滑鼠圖示
        }

2020年4月7日 星期二

美化WINFORM UI

暫時試用CSKIN看看

先到
http://www.cskin.net
下載套件

裡面的4.0是.net framework4.0

C#工具箱右鍵→加入索引標籤→填入名字(CSkin)
把資料夾內的dll等檔案拖入標籤下即可套用CSKIN的版型

2020年4月2日 星期四

2020年3月27日 星期五

C# 避免同樣的程式重複開啟

再Program.cs中先using System.Diagnostics;

再寫入程式碼

            string processName = Process.GetCurrentProcess().ProcessName;
            Process[] p = Process.GetProcessesByName(processName);

            if (p.Length > 1)
            {
                MessageBox.Show("已有同樣程式使用中");
                Environment.Exit(1);
            }

2020年3月24日 星期二

SQL 快速修改預設值

不過還是要一個個填
但填一個ENTER一次比起填一個點一個快上許多

開啟資料庫
選擇資料庫圖表
右鍵→新增資料庫圖表→選擇要改的TABLE

再跳出來的TABLE上右鍵→資料表檢視→自訂
會變成自訂欄位
再右鍵一次→資料表檢視→修改自訂→把要顯示的欄位丟過去
這樣可以比較快速修改預設值或其他值

2020年3月6日 星期五

2020年2月18日 星期二

SQL SERVER 結果為預設的NULL顯示為其他有意義的值

才不用一個個改型態預設值改到要死

查詢時用ISNULL

例如:
SELECT ISNULL(電話,0)
From dbo.DB
WHERE 條件;

或是:
SELECT 姓名, ISNULL(電話,0)
From dbo.DB
WHERE 條件;

2020年2月15日 星期六

C# 程式啟動後游標在TEXTBOX上

寫在FORM LOAD

            ActiveControl = textBox1;
            textBox1.Focus();

2020年2月6日 星期四

SQL的DATE相關函式

DATEDIFF(DAY,起始時間,GETDATE())

用GETDATE():今天日期 - 起始時間後的結果以天數(DAY)算

如2018/01/02 -2018/01/01就是1,運用上可以使用在到期日判斷
用到期日-今日 >=0就是沒到期,<0為過期

DATEADD(單位,量,日期)
單位可用年月日
量就看要加入多少

例如:
DATEADD(YEAR,1,起始日)
代表起始日+1年

2020年2月4日 星期二

SQL取得最後一筆資料

SELECT TOP 1 *
FROM dbo.data
order by 編號 desc;

只搜尋一筆
某欄位排序從最後一筆

2020年2月2日 星期日

SQL用C#連接區網登入

            using System.Data.SqlClient;

            conStr = "Server=ip\\sqlexpress,port;Database=data;uid=uid;pwd=pwd";

server填入IP位址,後面填入port
port可以開啟SQL組態管理員找通訊協定→TCP/IP右鍵內容的IP找最下面的IP ALL的動態通訊阜

再去防火牆打開該PORT

IP後面要掛上\\SQLEXPRESS才能正常登入

             using (SqlConnection conn = new SqlConnection(conStr))
            {
                conn.Open();
            }

以上開啟通訊
接下來就是下指令(額外開一篇)


2020年1月15日 星期三

SQL Server用帳號密碼登入

預設用Windows驗證登入

資料庫上右鍵→屬性
安全性的伺服器驗證更改成"SQL Server 及 Windows驗證模式"

安全性上右鍵→新增→登入

新增帳號
選擇SQL Server驗證
設定密碼,強制執行密碼逾期那邊取消勾選

伺服器對應、安全性實體等要設定一下

記得要重開機才能順利登入

SQL Server相關指令(慢慢新增)

1.SELECT 查詢
可用萬用 *

SELECT *                                     //查詢後列出所有欄位
FROM dbo.data                             //查詢哪張表(記得上面要選好資料庫)

WHERE ID = '001'                        //查詢ID為001的所有資料
WHERE ID LIKE '001%'              //查詢ID前面部分有001的所有資料
WHERE ID LIKE '1%'          //查詢ID部分有001的所有資料

最後要用分號隔開,執行

2.UPDATE 修改

UPDATE dbo.data                        //要修改的表格
SET 姓名 = '王大明'                    //要修改的欄位 = 修改後的值
WHERE ID = '002'                       //符合條件者都會被修改,可參照查詢那邊


SQL SERVER 匯入EXCEL資料

1.利用SQL SERVER Management Studio(SSMS)匯入及匯出精靈

先右鍵建立好一個資料庫Testdata
在Testdata上按右鍵→工作→匯入資料

資料來源選擇:Mircosoft EXCEL,並選擇準備好的EXCEL檔案

此測試資料已經在第一行先建立了欄位名稱(如果先建好就不要勾選第一列有資料行名稱)

目的地選擇:SQL Server Native Client
使用Windows驗證
選擇要進去的資料庫

選擇從一個或多個資料表檢視(略)

選擇要匯入的資料表,可編輯對應和預覽

※匯入中文資料使用Unicode則選擇nChar或是nVarchar (但在C#程式中可能要另行處理要注意)

NEXT→FINISH則匯入成功

2.如果要新增複製在EXCEL上的少數資料可用複製貼上的

先把要複製的新資料複製好,欄位數要對

先在存在的資料表上右鍵選擇編輯前200個資料列
拉到最下面的201 NULL資料
選取起來(整列)
貼上,存檔即可




確認視窗 DialogResult

使用在刪除前再次確認

                DialogResult Result;

                Result = MessageBox.Show(視窗內文字, 視窗標題, MessageBoxButtons.YesNo);

                if (DialogResult.Yes == Result)
                {
                    如果選YES的時候要做的事情
                }
                else
                {
                    Yes外的時候要做的事情
                }

第三欄除了YesNo外還有YesNoCancel等
那可能就要寫選No時要做的事情(用else if)

2020年1月1日 星期三