【C#】WinForm開發(fā)的小技巧(2)——命令行

.NET Core 依賴注入改造(2)- 委托轉(zhuǎn)換

一、

winform開發(fā)控制臺開發(fā)的時候,我們經(jīng)常希望自己的程序可以留一些小“后門”
或方便調(diào)試掠河,或特殊需求颠印,或僅為了好玩瘤载;
比如
我做了一個掃碼登錄的功能信夫,但是處于測試狀態(tài)扁位,通過命令行打開此功能

二塞栅、

可能大家會覺得很簡單Environment.GetCommandLineArgs().Contains("--debug")不就行了嗎者铜?
但是如果增加一個功能,比如這樣

所以我寫了一個解析命令行的類

三放椰、

StartupCommands

static class StartupCommands
{
    static StartupCommands()
    {
        try
        {
            var args = Environment.GetCommandLineArgs().Skip(1).ToArray(); // 去掉命令行第一個命令
            foreach (var prop in typeof(StartupCommands).GetProperties())
            {
                // 循環(huán)當前類的屬性, 優(yōu)先獲取 --{屬性全名,不區(qū)分大小寫} 如 --loginname
                // 如果沒有取到, 再次獲取 -{短命令} 如 -n
                var arg = args.FirstOrDefault(x => x.StartsWith($"--{prop.Name}", StringComparison.OrdinalIgnoreCase))
                            ?? (Attribute.GetCustomAttribute(prop, typeof(ShortAttribute)) is ShortAttribute attr
                                ? args.FirstOrDefault(x => x.StartsWith($"-{attr.Command}", StringComparison.Ordinal))
                                : null);
                if (arg == null) // 都沒取到則忽略
                {
                    continue;
                }
                // 獲取命令 冒號(:) 之后的內(nèi)容, 當做屬性值, 如果不存在冒號
                // 默認值為true , 如: --debug  等于  --debug:true
                var val = arg.Split(':').ElementAtOrDefault(1)?.Trim() ?? "true";
                // 轉(zhuǎn)換類型并設(shè)置到屬性
                prop.SetValue(null, Convert.ChangeType(val, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType));
            }
        }
        catch (Exception ex)
        {
            System.Diagnostics.Trace.TraceError("SuperAddon初始化 異常", ex);
            throw new NotSupportedException("啟動參數(shù)有誤", ex);
        }
    }

    /// <summary>
    /// 短命令
    /// </summary>
    [AttributeUsage(AttributeTargets.Property)]
    sealed class ShortAttribute : Attribute
    {
        public ShortAttribute(string command) => Command = command;
        public string Command { get; }
    }

    [Short("n")]
    public static string LoginName { get; private set; }

    [Short("p")]
    public static string Password { get; private set; }

    [Short("d")]
    public static bool? Debug { get; private set; }

    public static bool? AutoLogin { get; private set; }
}

基本規(guī)則是 --完整指令名[:值]-短指令[:值]
完整指令名匹配 類中的屬性名稱(不區(qū)分大小寫)
短指令通過ShortAttribute來指定(區(qū)分大小寫)
不存在時默認為 true

四作烟、

這樣用

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        if (StartupCommands.Debug == true)
        {
            pictureBox2.Visible = true;
        }
        textBox1.Text = StartupCommands.LoginName;
        textBox2.Text = StartupCommands.Password;
    }

    protected override void OnShown(EventArgs e)
    {
        if (StartupCommands.AutoLogin == true)
        {
            button1.PerformClick();
        }
        base.OnShown(e);
    }

    private void pictureBox2_Click(object sender, EventArgs e)
    {
        groupBox1.Visible = false;
        pictureBox1.Visible = false;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show("登錄成功");
    }
}

五、

嗯砾医。拿撩。。就這么點如蚜。压恒。影暴。

如果文章可以幫到你,別忘了幫我點一下喜歡探赫,讓更多的人看到

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末型宙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伦吠,更是在濱河造成了極大的恐慌妆兑,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毛仪,死亡現(xiàn)場離奇詭異搁嗓,居然都是意外死亡,警方通過查閱死者的電腦和手機箱靴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門腺逛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刨晴,你說我怎么就攤上這事屉来÷贩” “怎么了狈癞?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長茂契。 經(jīng)常有香客問我蝶桶,道長,這世上最難降的妖魔是什么掉冶? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任真竖,我火速辦了婚禮,結(jié)果婚禮上厌小,老公的妹妹穿的比我還像新娘恢共。我一直安慰自己,他們只是感情好璧亚,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布讨韭。 她就那樣靜靜地躺著,像睡著了一般癣蟋。 火紅的嫁衣襯著肌膚如雪透硝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天疯搅,我揣著相機與錄音濒生,去河邊找鬼。 笑死幔欧,一個胖子當著我的面吹牛罪治,可吹牛的內(nèi)容都是我干的丽声。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼觉义,長吁一口氣:“原來是場噩夢啊……” “哼恒序!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谁撼,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤歧胁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厉碟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喊巍,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年箍鼓,在試婚紗的時候發(fā)現(xiàn)自己被綠了崭参。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡款咖,死狀恐怖何暮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铐殃,我是刑警寧澤海洼,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站富腊,受9級特大地震影響坏逢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赘被,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一是整、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧民假,春花似錦浮入、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至球化,卻和暖如春秽晚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筒愚。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工赴蝇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巢掺。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓句伶,卻偏偏與公主長得像劲蜻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子考余,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理先嬉,服務發(fā)現(xiàn),斷路器楚堤,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 又是一個月考結(jié)束身冬,幾人歡喜幾人憂衅胀!看到好幾個連續(xù)兩次考試進步的孩子,真的替他們高興酥筝。又感覺到好幾個連續(xù)落后的滚躯,擔心...
    滌冰閱讀 366評論 0 0
  • 我是一個很喜歡說卻不又不喜歡做的人,由于頭發(fā)稀疏嘿歌,前額老是被吐槽很禿掸掏,總是怕自己嫁不出去,于是我把頭發(fā)給剪短了宙帝。 ...
    鄧地瓜閱讀 289評論 0 0