WinForm開發(fā)的小技巧(1)——嵌入窗口

一慰丛、

開發(fā)Winform的程序員們一定遇到過這樣的窗口



這種窗口最大的問題是功能太多擎析,可能會有很多控件和事件的處理代碼览妖,會非常難維護轧拄。

二、

遇到這種窗口讽膏,我一般會將每一個tab頁做成獨立的Form然后通過以下代碼組合起來

var frm = new Form2();
frm.TopLevel = false;
frm.Parent = this;
frm.Show();

效果是這樣的


三檩电、

為了讓用戶無感知,在做一些以下調(diào)整

var frm = new Form2();
frm.TopLevel = false;
frm.Parent = panel1;  //設(shè)置一個區(qū)域
frm.FormBorderStyle = FormBorderStyle.None; //無邊框
frm.Dock = DockStyle.Fill;     //最大化
frm.Show();

四府树、

這種做法的好處是顯而易見的:
每個窗口中的功能相對處于獨立的Form中俐末,代碼不會混亂;
如果需要對整個功能進行替換奄侠,重構(gòu)或刪除卓箫,只要修改Form或刪除整個Form即可;
在一些特殊場景下還可以獨立彈出使用垄潮,等等……
而對于用戶來說烹卒,完全不知道這個窗口是由多個窗口組合而成的闷盔,可以說無副作用。

五旅急、

封裝成一個擴展方法方便調(diào)用逢勾,順便處理一些簡單的異常

using System;
using System.Windows.Forms;
static class Extensions
{
    public static void Into(this Form form, Control control)
    {
        if (form == null || form.InvokeRequired)
        {
            form?.Invoke((Action)(() => Into(form, control))); //防止跨線程異常
            return;
        }
        form.TopLevel = false;
        form.Parent = control;
        form.FormBorderStyle = FormBorderStyle.None;
        form.Dock = DockStyle.Fill;
        form.Show();
    }
}

六、

應(yīng)用到tab頁



添加代碼

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        new Form2().Into(tabPage1); 
        new Form3().Into(tabPage2);
        new Form4().Into(tabPage3);
    }
}

效果是這樣的:


七藐吮、

為了更方便的使用(不想在刪除或添加新的窗口的時候改動代碼)溺拱,再作以下調(diào)整:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        foreach (TabPage page in tabControl1.TabPages)
        {
            if (page.Tag is string s)
            {
                var type = Type.GetType(s, false, true);
                if (type != null)
                {
                    var form = (Form)Activator.CreateInstance(type);
                    form.Into(page);
                    form.BackColor = Color.White;
                }
                else
                {
                    page.Controls.Add(new Label
                    {
                        Text = s + " 構(gòu)造失敗",
                        AutoSize = false,
                        Dock = DockStyle.Fill,
                        TextAlign = ContentAlignment.MiddleCenter,
                    });
                }
            }
        }
    }
}

這樣我只需要將page的tag設(shè)置成窗口的類名全名就可以了


八、

如果可以幫到你谣辞,別忘了幫我點一下喜歡迫摔,讓更多的人看到


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市泥从,隨后出現(xiàn)的幾起案子句占,更是在濱河造成了極大的恐慌,老刑警劉巖歉闰,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辖众,死亡現(xiàn)場離奇詭異卓起,居然都是意外死亡和敬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門戏阅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昼弟,“玉大人,你說我怎么就攤上這事奕筐〔斩唬” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵离赫,是天一觀的道長芭逝。 經(jīng)常有香客問我,道長渊胸,這世上最難降的妖魔是什么旬盯? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮翎猛,結(jié)果婚禮上胖翰,老公的妹妹穿的比我還像新娘。我一直安慰自己切厘,他們只是感情好萨咳,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疫稿,像睡著了一般培他。 火紅的嫁衣襯著肌膚如雪鹃两。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天舀凛,我揣著相機與錄音怔毛,去河邊找鬼。 笑死腾降,一個胖子當(dāng)著我的面吹牛拣度,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播螃壤,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抗果,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奸晴?” 一聲冷哼從身側(cè)響起冤馏,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寄啼,沒想到半個月后逮光,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡墩划,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年涕刚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乙帮。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡杜漠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出察净,到底是詐尸還是另有隱情驾茴,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布氢卡,位于F島的核電站锈至,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏译秦。R本人自食惡果不足惜峡捡,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诀浪。 院中可真熱鬧棋返,春花似錦、人聲如沸雷猪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽求摇。三九已至射沟,卻和暖如春殊者,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背验夯。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工猖吴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挥转。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓海蔽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绑谣。 傳聞我的和親對象是個殘疾皇子党窜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

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

  • 人生就像一盒巧克力,你永遠(yuǎn)不知道會吃到什么口味的借宵。對于未來幌衣,我們有太多的無法掌控的事情,正因為這樣壤玫,我們才要活在當(dāng)...
    心晴999閱讀 263評論 0 0
  • 對那些不曾被遵守的承諾,我們?nèi)绱送春蘩ǜ模薜揭挥|碰回憶就痛得齜牙咧嘴腻豌,幾乎快要破口大罵,罵它們的有始無終嘱能、虎頭無尾,...
    姚小文閱讀 321評論 0 0
  • 一個人虱疏,應(yīng)該永遠(yuǎn)在成長惹骂,永遠(yuǎn)在路上,永遠(yuǎn)追尋和探求自己的內(nèi)心做瞪,永遠(yuǎn)對生命懷著深沉的敬意对粪、溫情的盼望,永遠(yuǎn)堅定地站在...
    琴素親子閱讀 755評論 0 0
  • 上一篇文章解說了:奇門遁甲的源流和何為奇門遁甲装蓬,今天接著上篇文章講: 第三節(jié) 奇門遁甲的類別 奇門遁甲根據(jù)不...
    思無邪_Q閱讀 6,059評論 16 35
  • 最是那一回眸的笑容 像一朵盛開的玉蘭花 純潔著拭,無瑕 美麗,優(yōu)雅 不去想她 不去想她 不去想她 可是心里怎么全是她
    上官飛鴻閱讀 407評論 11 12