2022年5月19日 星期四

[C#]使用json取得資料/取得多層

 使用環境VS2019
NuGet先加入Newtonsoft.json 
並且使用以下宣告

using Newtonsoft.Json.Linq;
using Newtonsoft.Json;

在mamespace中 宣告json要使用的結構類別

    public class cJsonDataItem

    {

        public string server { get; set; }

        public string database { get; set; }

        public string user { get; set; }

        public string password { get; set; }

        public string linkedserver { get; set; }

    }

在取得json 字串(下方用temp代替)後使用以下方式即可取得數值

string temp = "{    "accountingAck": {        "server": "127.0.0.1",        "database": "Accounting_Ack_AZ",        "user": "sa",        "password": "123456789",        "linkedserver": "REMOTE_LINK"    }}";

var dynamic_obj = JObject.Parse(temp);

string s = string.Empty;

StringBuilder strb = new StringBuilder();

StringBuilder strbb = new StringBuilder();

 

foreach (JProperty item in dynamic_obj.Children())

{

    strb.Append(item.Name);

    strbb.Append(item.Value);

}

StringBuilder strbc = new StringBuilder();

StringBuilder strbd = new StringBuilder();

dynamic darray = JsonConvert.DeserializeObject(strbb.ToString());   //此行為動態拿法 不用宣告最上面的類別

cJsonDataItem cjs = JsonConvert.DeserializeObject<cJsonDataItem>(strbb.ToString()); //此行需要使用最上面的類別cJsonDataItem

最終透過cjs 可以輕鬆拿取到各項的字串結果

temp = cjs.server;

temp = cjs.database;

            


2022年5月9日 星期一

[C#]程式焦點切換後恢復焦點的方式 foucs

 使用user32.dll 的Api,應用情境如以下:
在程式A上點擊按鈕後啟動B程式在背景執行,此時的焦點需要回到A程式
正常流程焦點會在B,透過以下方式可以將焦點設定為A


範例:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Test
{
    public partial class PlayVoice : Form
    {
        public PlayVoice()
        {
            InitializeComponent();
        }


        [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetForegroundWindow", CharSet = System.Runtime.InteropServices.CharSet.Auto, ExactSpelling = true)]
        public static extern IntPtr GetF();             //獲得本窗體的控制代碼
        [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
        public static extern bool SetF(IntPtr hWnd);    //設定此窗體為活動窗體

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (this.Handle != GetF())           //如果本視窗沒有獲得焦點
                SetF(this.Handle);                //設定本視窗獲得焦點
        }
    }
}

2022年5月4日 星期三

[C#]視窗在工具列點擊出現提示選單

 新增工具元件"notifyIcon" 與 "contextMenuStrip" 加到專案中

1.在Form.cs 的UI上選擇contextMenuStrip加入事件

2.到notifyIcon的屬性contextMenuStrip添加contextMenuStrip1元件名稱

3.到notifyIcon的事件 加入Click


using System.Reflection;

        private void notifyIcon1_Click(object sender, EventArgs e)

        {

            Type t = typeof(NotifyIcon);

            MethodInfo mi = t.GetMethod("ShowContextMenu", BindingFlags.NonPublic | BindingFlags.Instance);

            mi.Invoke(this.notifyIcon1, null);

        }

即可完成選單與通知

[SQL]顯示千分位與小數顯示

  CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) CONVERT style參數說明 1  (expression為 money 或 smallmoney型別): 0 : 預設,保留小數位後兩位,並四捨...