欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

smobiler仿饿了么app搜索页面

程序员文章站 2022-05-03 17:01:11
饿了么-搜索页面如下图所示: 完整代码见git :https://github.com/comsmobiler/BlogsCode 创建窗体 创建一个smobilerForm ,文件名设置ElmSearch, 将窗体的Layout设置Relative,再设置窗体的Statusbar属性 并在窗体中拖 ......

饿了么-搜索页面如下图所示:

 

完整代码见git :https://github.com/comsmobiler/blogscode

创建窗体

创建一个smobilerform ,文件名设置elmsearch, 将窗体的layout设置relative,再设置窗体的statusbar属性

并在窗体中拖入panel和listview,panel.height 设置40,listview.flex设置1 ,listview的模板类设置成listlayout

 

实现搜索框

将上图的panel1.layout设置relative,panel1.direction设置row,panel1.padding设置(6,6,6,6),panel1.size设置为(0,40)。

在panel1中拖入imagebutton1,

imagebutton1.imagttype设置fonticon,

imagebutton1.resourceid设置” angle-left” ,

imagebutton1.size设置(27,0)。

在imagebutton1的点击事件中写this.close();

接着在panel1中拖入panel2,

panel2.borderradius设置12,

panel2.direction设置row,

panel2.itemalign设置center,

panel2.layout设置relative,

panel2.touchable设置true,

panel2.backcolor设置whitesmoke,

panel2.magrin设置(6,0,0,0),

panel2.flex设置1 。

在panel2 中加入fonticon控件,

fonticon1.location设置(6,0),

fonticon1.size设置(15,15),

fonticon1.forecolor设置gainsboro,

fonticon1.resource设置”search”

在panel2中继续加入label控件,label控件的name设置keylab,

keylab.flex设置1

keylab.forecolor设置gainsboro

keylab.location设置(6,0,0,0)

keylab.margin设置(6,0,0,0)

keylab.padding设置(4,0,0,0)

keylab.text设置”曼玲粥店”

创建smobilerusercontrol

创建一个smobilerusercontrol,文件名设置elmlayout, 将elmlayout.layout设置relative,backcolor s设置white,flex设置1

上图panel1 用来实现搜索框,步骤和前面一样,只是elmlayout中的keylab改成textbox控件,最后在elmlayout中拖入两个panel,分别命名为hispanel和dispanel,这两个panel的size设置(0,0)。这样设计器部分就完成了。

代码

elmsearch.cs

smobiler仿饿了么app搜索页面
 1 using system;
 2 using system.collections.generic;
 3 using system.data;
 4 using system.linq;
 5 using system.text;
 6 using selectdemo.layouts;
 7 using smobiler.core;
 8 using smobiler.core.controls;
 9 
10 namespace selectdemo
11 {
12      partial class elmsearch : smobiler.core.controls.mobileform
13      {
14          public elmsearch() : base()
15          {
16              //this call is required by the smobilerform.
17              initializecomponent();
18          }
19 
20         private dbclass dbclass = new dbclass();//dbclass 数据库查询类
21          private void panel2_press(object sender, eventargs e)
22          {
23              showelmlayout();
24          }
25          private void showelmlayout()
26          {
27              //筛选项数据
28              selectdata d1 = new selectdata()
29              {
30                  title = "历史搜索",
31                  items = new string[] { "粥" },
32                  ishow = true
33              };
34              selectdata d2 = new selectdata()
35              {
36                  title = "历史搜索",
37                  items = new string[] { "超级发布30减20起", "小恒水饺", "早餐", "油条", "炸鸡" ,"包子","皮蛋瘦肉粥"},
38                  ishow = false
39              };
40 
41             list<selectdata> sds = new list<selectdata>();
42              sds.add(d1);
43              sds.add(d2);
44             
45              // 实例化elmlayout
46              elmlayout uc = new elmlayout(sds, keylab.text);
47              dialogoptions footerdialogoptions;
48              footerdialogoptions = new dialogoptions(layoutjustifyalign.flexstart, system.drawing.color.transparent, smobiler.core.controls.padding.empty, true);
49              //在窗体中弹出elmlayout
50              showdialog(uc, footerdialogoptions, (obj, args) =>
51              {
52                  if (uc.showresult == showresult.yes)
53                  {
54                      keylab.text = uc.currentkey;
55                      datatable dt = dbclass.dbconnectandquert(uc.querystr);
56                      listview1.rows.clear();
57                      listview1.datasource = dt;
58                      listview1.databind();
59                  }
60              });
61 
62         }
63          private void imagebutton1_press(object sender, eventargs e)
64          {
65              this.close();
66          }
67      }
68 }

elmlayout.cs

smobiler仿饿了么app搜索页面
  1 using system;
  2 using system.collections.generic;
  3 using system.linq;
  4 using system.text;
  5 using smobiler.core;
  6 using smobiler.core.controls;
  7 
  8 namespace selectdemo.layouts
  9 {
 10     ////toolboxitem用于控制是否添加自定义控件到工具箱,true添加,false不添加
 11     //[system.componentmodel.toolboxitem(true)]
 12     partial class elmlayout : smobiler.core.controls.mobileusercontrol
 13     {
 14         public elmlayout() : base()
 15         {
 16             //this call is required by the smobilerusercontrol.
 17             initializecomponent();
 18         }
 19         public elmlayout(list<selectdata> selectdatas, string defalutstr) : base()
 20         {
 21             //this call is required by the smobilerusercontrol.
 22             initializecomponent();
 23             gethhistory(selectdatas, defalutstr);
 24         }
 25         public string currentkey;
 26         public string querystr;
 27 
 28         private void closedialog_press(object sender, eventargs e)
 29         {
 30             this.showresult = showresult.no;
 31             this.close();
 32 
 33         }
 34         private void gethhistory(list<selectdata> selectdatas, string defaultstr)
 35         {
 36             this.keylab.text = defaultstr;
 37             foreach (selectdata data in selectdatas)
 38             {
 39                 //该label用于显示“历史搜索”文字
 40                 label label1 = new label()
 41                 {
 42                     text = data.title,
 43                     flex = 1,
 44                     fontsize = 15,
 45                     size = new system.drawing.size(0, 25),
 46                     bold=true,
 47                     forecolor=system.drawing.color.gray
 48                 };
 49 
 50                 panel p1 = new panel()
 51                 {
 52                     layout = layoutposition.relative,
 53                     direction = layoutdirection.row,
 54                     size = new system.drawing.size(0, 0),
 55                     padding = new padding(12, 0, 12, 0)
 56                 };
 57 
 58                 p1.controls.add(label1);
 59 
 60                 panel p2 = new panel()
 61                 {
 62                     layout = layoutposition.relative,
 63                     direction = layoutdirection.row,
 64                     size = new system.drawing.size(0, 0),
 65                     padding = new padding(12, 0, 12, 0),
 66                     wrap = layoutwrap.wrap
 67                 };
 68                 if (data.ishow == true)
 69                 {   
 70                     //添加“历史搜索”后的删除按钮
 71                     imagebutton imgbtn = new imagebutton()
 72                     {
 73                         imagetype = imageex.imagestyle.fonticon,
 74                         resourceid = "trash-o",
 75                         iconcolor = system.drawing.color.silver,
 76                         size = new system.drawing.size(25, 25)
 77                     };
 78                     imgbtn.press += this.deletebuttonpress;
 79                     p1.controls.add(imgbtn);
 80 
 81                     for (int i = 0; i < data.items.length; i++)
 82                     {
 83                         button btn = new button()
 84                         {
 85                             text = data.items[i],
 86                             backcolor = system.drawing.color.whitesmoke,
 87                             forecolor = system.drawing.color.gray,
 88                             size = new system.drawing.size(0, 0),
 89                             padding = new padding(12,8,12,8),
 90                             borderradius = 4,
 91                             margin = new margin(0, 4, 12, 4)
 92                         };
 93                         btn.press += this.selectbuttonpress;
 94                         p2.controls.add(btn);
 95                     }
 96                     hispanel.controls.add(p1);
 97                     hispanel.controls.add(p2);
 98                 }
 99                 else
100                 {
101                     //原型上“超级发布30减20起 按钮”
102                     button spbtn = new button()
103                     {
104                         text = data.items[0],
105                         backcolor = system.drawing.color.aliceblue,
106                         forecolor = system.drawing.color.deepskyblue,
107                         size = new system.drawing.size(0, 0),
108                         padding = new padding(12,8,12,8),
109                         borderradius = 4,
110                         margin = new margin(0,4, 12, 4)
111                     };
112                     spbtn.press += this.selectbuttonpress;
113                     p2.controls.add(spbtn);
114 
115                     for (int i = 1; i < data.items.length; i++)
116                     {
117                         button btn = new button()
118                         {
119                             text = data.items[i],
120                             backcolor = system.drawing.color.whitesmoke,
121                             forecolor = system.drawing.color.gray,
122                             size = new system.drawing.size(0, 0),
123                             padding = new padding(12,8,12,8),
124                             borderradius = 4,
125                             margin = new margin(0, 4, 12, 4)
126                         };
127                         btn.press += this.selectbuttonpress;
128                         p2.controls.add(btn);
129                     }
130                     dispanel.controls.add(p1);
131                     dispanel.controls.add(p2);
132                 }
133 
134             }
135         }
136 
137         /// <summary>
138         /// 清空历史搜索记录
139         /// </summary>
140         /// <param name="sender"></param>
141         /// <param name="e"></param>
142         private void deletebuttonpress(object sender, eventargs e)
143         {
144             hispanel.controls.clear();
145         }
146         /// <summary>
147         /// 搜索内容查询
148         /// </summary>
149         /// <param name="sender"></param>
150         /// <param name="e"></param>
151         private void selectbuttonpress(object sender, eventargs e)
152         {
153             button btn = (button)sender;
154             this.showresult = showresult.yes;
155             currentkey = btn.text;
156             //将查询关键字替换进去
157             querystr = @"select * from `testdata` where data like '%"+currentkey+"%'";
158             this.close();
159         }
160         /// <summary>
161         /// 搜索框回车键事件
162         /// </summary>
163         /// <param name="sender"></param>
164         /// <param name="e"></param>
165         private void keylab_submitediting(object sender, eventargs e)
166         {
167             this.showresult = showresult.yes;
168             currentkey = keylab.text;
169             //将查询关键字替换进去
170             querystr = @"select * from `testdata` where data like '%" + keylab.text+ "%'";
171             this.close();
172         }
173 
174         private void imagebutton1_press(object sender, eventargs e)
175         {
176             this.showresult = showresult.no;
177             this.close();
178         }
179     }
180 }

selectdata.cs

smobiler仿饿了么app搜索页面
 1 using system;
 2 using system.collections.generic;
 3 using system.linq;
 4 using system.text;
 5 using system.threading.tasks;
 6 
 7 namespace selectdemo
 8 {
 9     class selectdata
10     {
11         public string title { set; get; }
12         public string[] items { set; get;}
13         public boolean  ishow { set; get; }
14         public boolean isradio { set; get; }
15         public string type { set; get; }
16 
17     }
18 }

dbclass.cs

smobiler仿饿了么app搜索页面
 1 using system;
 2 using system.collections.generic;
 3 using system.data;
 4 using system.data.sqlclient;
 5 using system.linq;
 6 using system.text;
 7 using system.threading.tasks;
 8 using mysql.data.mysqlclient;
 9 namespace selectdemo
10 {
11     class dbclass
12     {
13         /// <summary>
14         /// 连接数据库并查询相应数据
15         /// </summary>
16         /// <param name="query">数据库查询语句</param>
17         /// <returns></returns>
18         public datatable dbconnectandquert(string query)
19         {
20            
21             string connetstr = "server=127.0.0.1;port=3306;user=****;password=****; database=***;charset=utf8";
22             mysqlconnection conn = new mysqlconnection(connetstr);
23             try
24             {   
25                 datatable dt = new datatable();
26                 conn.open();
27                 mysqlcommand com = new mysqlcommand(query, conn);
28                 mysqldataadapter adapter = new mysqldataadapter(com);
29                 adapter.fill(dt);
30                 return dt;
31                
32             }
33             catch (mysqlexception ex)
34             {
35                 console.writeline(ex.message);
36                 return null;
37             }
38             finally
39             {
40                 conn.close();
41             }
42         }
43     }
44 }