揭橥八个Winform新控件:Winfrom下的询问控件和情节展示控件网球

作品初稿写于二零一一年4月6日。

倘若大家看过自己的随笔小说《询问控件、分页控件、页面呈现控件,我的Web开发三大得力助手》相信大家都对Web中的查询控件、页面展现控件有不可胜计感动,现在自己那三个公布多个Winform版本的貌似控件:Winfrom下的查询控件和情节体现控件。

二〇一六年10月,在上海出游时翻出初稿做了修改。

先是大家想起一下Web的询问控件和情节展现控件先。

全文记录了一个屌丝男在北大里种种并不高大上的购销。小编末了因为那么些倒腾的阅历,有幸进入了国有集团做管理培训生。恩恩,喜欢倒腾的小伙伴可以看看打发时光,哈哈。

WEB查询控件

———–正文分割线——–

  1. 依照设定的字段属性在界面突显相应的求证及控件
  2. 支持下拉列表之间的联动,协助输入数据的印证操作。
  3. 支撑查询历史记录回想功效
  4. 支撑日期控件的合一
  5. 支持移动省公司界面样式集成

记得首先次到处奔走,踏上漳校的那天,内心是惊恐不安的。

网球 1

给自己影象最深的入学情景,是师兄师姐一波接一波来推销报纸,电话卡。高中时只精通晚自习的要雅观来那种情景,内心的火山突然向天空射出长远的火花:原来高校可以如此!!

WEB页面显示控件

还没规范开学的那几天,突然发现扬州校区靠海简单回潮,衣橱有可能不难生虫。于是和邻近兄弟去超市花8元钱买了4包樟脑丸(每包大致20颗樟脑丸,每颗0.1元股本),然后跑男生宿舍推销。每颗定价0.8元,2颗特惠(
那时西红柿炒蛋0.8元一份!)1.5元。对着都照旧后来的同级同学们,不停地兜售潮湿生虫的概念。几乎2个小时,多人卖完了4包樟脑丸,一人分了二十几块钱。当时因为那二十多,激动得没睡好。事后很长一段时间,住囊萤和映雪的男生都怀想买了天价樟脑丸。

  1. 支撑查看、扩展、编辑三种类型的页面突显
  2. 依照设定的字段属性在界面展现相应的求证及控件
  3. 匡助布局和样式修改
  4. 援助日期控件的融会
  5. 辅助移动省公司界面样式集成

跻身二〇〇四年10月。天气转冷了。因为自己喜欢躺在床上看书,就想来能夹在炕头铁杆子上的台灯会有一定须求。就跑去漳校外,找了一家女子内衣专卖店(哈哈,有兼卖点台灯),和业主谈好价钱,拿了10台床头灯去试销。发现必要很饱满,第三个夜晚除外有质地问题的2把,其他都卖掉了。价格接近是10元进,15元卖。后来前后大致卖了50个那样的台灯。

网球 2

12月尾旬,马上临近圣诞节和元朔了。在相当手机还不是很普及的年代(二〇〇四年),刚考上高校的学童都会给中学老师同学寄点贺卡吧?于是跑去校门口邮电局,拿了明天总的来说难看得不可能再无耻的首套复旦漳校明信片,一个一个宿舍去推销。0.8元进,1元卖,这一个利润现在看来实在少得令人没干劲。也不知晓当时怎么打了鸡血,不知跑了不怎么宿舍,费了不怎么口舌,前后卖了400多张,利润80元左右,还不够现在的同桌充一次话费吧。

上边我来介绍下Winform下的七个控件。

二零零五年六月,新乡校区首次接纳了网络自助选修课系统,全校沸沸扬扬。更加是周围的哥们儿们一个个专程快乐,我们都在说:体育课都得以自选哦~还有网球课可以选啊!那会还没高大上那个词,但是肯定网球课人气爆棚。当时想那么四人想选网球课,那网球拍的市场一定不利的。于是去校外进了一批拍子屯着等卖。影像很深入,网络自选开通当天该校男生宿舍楼贴了小广告,当天金融系2个宿舍就买了4把!相对是大单了!事后楼上兄弟问那单赚了多少,我算了下大概85元,被批判卖得太狠不道德(
额)

Winfrom下的询问控件和情节显示控件和Web的习性和基本框架是平等的,都是根据字段音讯,自动构筑UI,并提供对数码的辨证,下拉列表联动等,以便减少界面代码和界面布局导致的工作量充实。

大二转系,暑期憋足了劲想做新生工作。那会儿新生用品的营生都是被老生觊觎的大蛋糕。现在的学童都是在咖啡厅里谈风投谈人脉,可曾想过那时多少个男生撑着一张写着【师兄团队】的破布卖蚊帐和脸盆是种怎样的心气。

做那三个控件的要害目的是缩减代码,并有利于代码生成工具Database2夏普自动生成UI内容(WEB和Winform界面),约等于把界面突显的逻辑举行了包装。

那时候好卖的东西。紧假使小锁头,插座等不难忘带来的小件,以及台灯那种不便于从家带的大件。市场虽大,但是竞争惨烈。心里盘算,要抢越多事情,必须能在新生入学的两日时间内以最快捷度去覆盖宿舍。于是制定了一个可以进步速度的销售策略:不卖东西,改送东西!送东西速度永远比卖东西快。送新生一把锁,但必须签字答应从自家那边买台灯。锁的钱从灯里赚回来(对白:那时候大概没人知道Tmall)。

网球 3

新生入学的那二日,带着感冒的人身疯狂送锁。送出近100把锁,也就意味着换回近100个台灯的订单。事后光送货就花了5天时间。10年后的前几天慨叹下那时候博士的契约精神,近100个订单中只有1名新生毁约了

网球 4

二零零五年十一月。几回午饭,和楼上杨楷谈到2003级的师兄师姐立时要搬回总部读大三的事,觉得那时候肯定师兄师姐会留给不少没用了的参考书。于是立时行动,先是上门找师兄收旧书(价格都还记得,立陶宛语参考书3元一本,高数5元一本),发现收书太慢,就在女孩子凌云楼下摆点收书,很快场所就壮观起来,说师姐排队卖书给大家一点可是分。

即使如此和Web界面的控件使用方法大多,大家照旧来突显下有关的代码把,那样有助于明白控件的利用方面。

越努力,越幸运吧。游荡在母校里的收废品大伯看到我们在收书,就带我们去他家仓库。哇塞,满满一仓库的书,大多是新的(师兄师姐偷懒啦)。四伯按3元1斤卖给大家。于是做了三遍很大的投资,一口气买了1000多(数字可能不纯粹,只记得装了全体一个三轮车)的「旧书」搬回宿舍。等到二零一五年3月7日那天,乘着校督查队松懈的档子,在酒家门口支起了摊,所有师兄师姐的参考书半价销售。真的,那天的场馆可以叫做火爆。一贯从上午卖到天黑。好多系里的男生都来接济卖。除了几十本新定义马耳他语参考书因为教科书改了卖不出去,其他都卖光了。中午,三双猥琐的眼眸在宿舍里清点着洁白的银子。当算出最后多少人赚了快1200元时,第两回放到老实内向的小月仰天大笑。

查询控件窗体的一对代码:

大二,转系去了斯洛伐克语系。境遇了怪才舍友阿雷。他好不容易学院里最早的一批天猫用户吧(那时候快递量不够,唯有邮政能送到珠海校区,还要协调去校门口邮局取)。因为上学须求想买台马耳他语的电子词典。去阿比让电子城问,汉王的JP209是唯一一款日文版的电子辞典,售卖价格至极坚挺!699元!犹豫没买,回临沂后让阿雷在天猫商城上帮自己查了下,只要525!什么意况!!那一个年代哪有假货的定义,登时让阿雷买了台回来(记得运费好像是25元!)。获得手,觉得用起来卓殊顺手,于是脸上就布满了暴虐的笑(哈哈哈)。当时刚学了一个日文单词,汉字写作【八百屋】,日文的意思是蔬菜店,觉得挺酷的,就用【八百屋】多少个字印了片子和A4纸广告,在学堂里卖电子辞职。1年岁月,卖了200多台电子词典和mp5。最高光的时候(焦凹的脸),女对象带进集美大学意大利语系女人宿舍,用法语做了两遍口语秀,然后宣传概念:好的口语离不开给力的电子辞典。那天拿了14台卡西欧电子辞典的订单!如故回忆之后收了近2万元的现钞,怀揣着「巨款」和女对象(现在的爱妻)欢娱而不安地坐在集美回都林岛的公交上,瞧着窗外暗暗开心的光景。那一幕怎能忘记!电子辞典的营生,前后赚了10000多呢。

        private void InitSearch()
        {
            SearchControl1.Dock = DockStyle.Fill;
            //SearchControl1.PanelBorderStyle = TableLayoutPanelCellBorderStyle.Single;
            this.groupBox1.Controls.Add(SearchControl1);

二〇〇九年大四。完成学业前夕,发现包裹行李须要箱子和蛇皮袋。于是百度上挂钩了一家能提供那种产品的店堂。过了两日,宿舍里就堆起了快2米高的瓦楞纸箱和蛇皮袋(后来还补过三次货)。刚发轫动销相比较慢,一天2-3单,进入八月尾快7月的那会,订单一下井喷,送货忙可是来。卖到4月先是周,就全体卖空了。后来没心理做了。好多学员打电话说,你们再进点货吧,实在需求纸箱。。那笔生意和室友赚了1800元。请系里的哥们在校门口的本帮菜馆狠狠吃了一顿,还记得那次一桌吃了600块!那时候几杯小酒下去大家就心思得万分,隔壁英语专业的小兄弟让业主端了一大碗白糖上来撒在几片切开的西红柿上,那豪迈奢华的撒糖动作至今记得。

            this.SearchControl1.OutSQLValueChanged += new OutSQLChangedHandle(SearchControl1_OutSQLValueChanged);
            this.SearchControl1.OnAddNew += new AddNewHandler(SearchControl1_OnAddNew);
            this.SearchControl1.OnDelete += new DeleteHandler(SearchControl1_OnDelete);

幸好了高等学校之间的折磨,给协调贫瘠的简历扩展了几许特其余色彩。结业后取得了去国有公司做管理培训生的空子。

            Button appendButton = CreateButton(“btnAppended”, “其他”);
            this.SearchControl1.AppendedButtons = new Button[] { appendButton };

谢谢一起做过小事情的哥们们。谢谢买过自己樟脑丸的和羞耻贺年卡的同学们。谢谢带本人走进电商世界的阿雷。谢谢陪自己去兴华高校摆摊,陪自己一块儿被赶出来的女对象。

            FieldInfo nameInfo = new FieldInfo(“Name”, “姓名”, FieldType.String);

完成学业后爱折腾的脾气不改。先是买了条码机承包了信用社打印条码的事情(业务那几个词好大哇),睡眼惺忪地守在条码机前卷条码,一个夜晚打印1万张条码赚150元已是很满足的。后来发现坦帕便利店日清的方便面都有卖,瓦伦西亚却没什么卖。于是从辛辛那提倒了日清合味道去阿里格尔卖。从第四次拿90箱试探,到最高峰一个月卖了1000多箱。

            FieldInfo cityInfo = new FieldInfo(“City”, “城市”, FieldType.String);
            cityInfo.Width = 100;
            cityInfo.Items = new CListItem[] { new CListItem(“北京市”, “北京”), new CListItem(“广州”), new CListItem(“成都”) };
            cityInfo.TargetFieldName = “Area”;
            cityInfo.OnFillItem += new AddItemHandler(this.OnFillItem);

再后来,利用在日本的人脉关系,倒腾起了日本代购。从后期一周一两单,到现行一天十多少个包裹。当初陪我一头摆摊的女对象,现在成了陪自己联合打包包裹的子女大姑。

            FieldInfo areaInfo = new FieldInfo(“Area”, “地区”, FieldType.String);
            areaInfo.Items = new CListItem[0];

多谢这段不起眼却记忆犹新的常青,谢谢那段镌刻着大连大学LOGO的日子。时光的河入海流,大家终会分头走。但该校的时刻总会留给大家有的是何人也带不走的东西。感恩,敬爱。

            菲尔德Info manInfo = new 菲尔德Info(“Man”, “是不是男性”, 菲尔德(Field)Type.Boolean);
            菲尔德(Field)Info birthInfo = new 菲尔德(Field)Info(“Birthday”, “出生日期”, 菲尔德(Field)Type.Date提姆(Tim)e);
            FieldInfo ageInfo = new FieldInfo(“Age”, “年龄”, FieldType.Numeric);

            this.SearchControl1.SearchFields = new FieldInfo[] { nameInfo, cityInfo, areaInfo, manInfo, birthInfo, ageInfo };
            this.SearchControl1.RowControls = 3;
            this.SearchControl1.ShowAddNew = true;
            this.SearchControl1.LabelHorizontalAlign = System.Windows.Forms.VisualStyles.HorizontalAlign.Right;
            this.SearchControl1.InSQL = “Select * from Test”;

            BindData();
        }

        private void BindData()
        {
            using (SqlConnection conn = new SqlConnection(CONNECTION_STRING))
            {
                conn.Open();

                string sql = this.SearchControl1.OutSQL;
                SqlCommand command = new SqlCommand(sql, conn);
                foreach (string key in this.SearchControl1.PagerParameters.Keys)
                {
                    command.Parameters.Add(new SqlParameter(key, this.SearchControl1.PagerParameters[key]));
                }

                SqlDataAdapter adapter = new SqlDataAdapter(command);
                DataSet ds = new DataSet();
                adapter.Fill(ds, “test”);

                this.dataGridView1.DataSource = ds.Tables[0];
            }

 

页面呈现控件的窗体部分代码:

        private void InitEditControl()
        {
            editControl.Dock = DockStyle.Fill;

            //editControl.ControlType = ControlType.Edit;
            //TestInfo info = new TestInfo();
            //info.Name = “wuhuacong”;
            //editControl.EntityObject = info;

            FieldInfo nameInfo = new FieldInfo(“Name”, “姓名”, FieldType.String);
            nameInfo.IsRequired = true;
            nameInfo.ToolTip = “请输入用户名称”;
            nameInfo.ColumnSpan = 2;
            nameInfo.Width = 400;
            //nameInfo.MaxLength = 255;
            //nameInfo.TextColumns = 100;
            //nameInfo.TextRows = 2;
            //nameInfo.Enabled = false;
            nameInfo.IsMultiLine = true;
            //if (editControl.ControlType != ControlType.Add)
            //{
            //    nameInfo.Enabled = false; //设置“名称”不可编辑
            //}

            FieldInfo cityInfo = new FieldInfo(“City”, “城市”, FieldType.String);
            cityInfo.Items = new CListItem[] { new CListItem(“北京市”, “北京”), new CListItem(“广州”), new CListItem(“成都”), new CListItem(“武汉”) };
            cityInfo.TargetFieldName = “Area”;
            cityInfo.OnFillItem = new AddItemHandler(this.AddItem);
            cityInfo.ColumnSpan = 2;

            FieldInfo areaInfo = new FieldInfo(“Area”, “地区”, FieldType.String);
            areaInfo.Items = new CListItem[0];

            菲尔德Info manInfo = new 菲尔德(Field)Info(“Man”, “是或不是男性”, 菲尔德(Field)Type.Boolean);
            manInfo.Items = new CListItem[] { new CListItem(“男性”, “True”), new CListItem(“女性”, “False”) };
            manInfo.DefaultValue = “False”;

            菲尔德(Field)Info birthInfo = new 菲尔德(Field)Info(“Birthday”, “出生日期”, 菲尔德(Field)Type.Date提姆(Tim)e);
            birthInfo.IsRequired = true;
            birthInfo.DefaultValue = “2009-1-1”;
            birthInfo.CustomFormat = “yyyy-MM-dd”;

            FieldInfo ageInfo = new FieldInfo(“Age”, “年龄”, FieldType.Numeric);
            //ageInfo.CustomFormat = “#.##”;

            菲尔德Info favoriteInfo = new 菲尔德(Field)Info(“Favorites”, “兴趣爱好”, 菲尔德Type.String);
            favoriteInfo.Items = new CListItem[] { new CListItem(“篮球”), new CListItem(“足球”), new CListItem(“网球”), 
                new CListItem(“乒乓球”), new CListItem(“台球”,”t”), new CListItem(“羽毛球”, “y”) };
            favoriteInfo.ItemsType = ListControlType.CheckBoxList;
            favoriteInfo.ColumnSpan = 2;
            favoriteInfo.Width = 300;
            //favoriteInfo.DefaultValue = “篮球,乒乓球,t,y”;

            editControl.EidtFields = new FieldInfo[] { nameInfo, cityInfo, areaInfo, manInfo, birthInfo, ageInfo, favoriteInfo };
            editControl.RowControls = 2; //默许一行放置2个控件组
            //editControl.ContentControlWidth = 200;//所有控件统一宽度
            editControl.LabelHorizontalAlign = HorizontalAlign.Right;//标签文本对其方法
            editControl.PanelBorderStyle = TableLayoutPanelCellBorderStyle.None;//表格样式

            editControl.OnCancel = new CancelHandler(this.OnCancel);
            editControl.OnSaveData = new SaveDataHandler(this.OnSaveData);
            this.groupBox1.Controls.Add(editControl);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            InitEditControl();
        }

 

上边附上使用的例证,可以下载下来逐步切磋,其中Database.sql是测试例子的数据库脚本,允许例子前,请初阶化数据库。

http://files.cnblogs.com/wuhuacong/TestWinControl.rar 

瞩望我们使用开心,下一步我将集成UI的自动生成到Database2夏普中,和Web一样,利用查询控件和分页控件、页面突显控件已毕UI的变型。