首页 > 代码库 > winform窗体自定义控件
winform窗体自定义控件
先上代码!!!
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Drawing; 5 using System.Data; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 using System.Reflection; 11 namespace ControlSet 12 { 13 //处理分页时的委托,内置各种方法 14 public delegate void PagerHandler(SimplePager sender); 15 public partial class SimplePager : UserControl 16 { 17 public SimplePager() 18 { 19 InitializeComponent(); 20 } 21 22 protected override void onl oad(EventArgs e) 23 { 24 //this.panel_Main.BringToFront(); 25 //让panel控件浮动在最下方 26 this.panel_Main.SendToBack(); 27 //当前页的按钮风格 28 this.btn_Number1.BackColor = this.Color; 29 this.btn_Number1.ForeColor = Color.White; 30 this.btn_Number1.Font = new Font("微软雅黑", 15, FontStyle.Bold); 31 this.btn_Number1.Cursor = Cursors.Hand; 32 this.btn_Number1.Location = new Point(206, 19); 33 34 //上一页 35 this.btn_privious.BackColor = Color.White; 36 this.btn_privious.ForeColor = this.Color; 37 this.btn_privious.Font = new Font("微软雅黑", 15, FontStyle.Bold); 38 this.btn_privious.Cursor = Cursors.Hand; 39 40 41 //下一页 42 this.btn_Next.BackColor = Color.White; 43 this.btn_Next.ForeColor = this.Color; 44 this.btn_Next.Font = new Font("微软雅黑", 15, FontStyle.Bold); 45 this.btn_Next.Cursor = Cursors.Hand; 46 47 //尾页 48 this.btn_last.BackColor = Color.White; 49 this.btn_last.ForeColor = this.Color; 50 this.btn_last.Font = new Font("微软雅黑", 15, FontStyle.Bold); 51 this.btn_last.Cursor = Cursors.Hand; 52 //其他页的设置和上一页下一页的风格一页 53 base.OnLoad(e); 54 } 55 56 public void ClickSearch() 57 { 58 this.btn_last.Width = 33 + this.PageCount.ToString().Length * 10; 59 this.btn_last.Text = this.PageCount.ToString(); 60 if (this.PageCount < 6) 61 { 62 this.btn_Number1.BackColor = this.Color; 63 this.btn_Number1.ForeColor = Color.White; 64 this.btn_Number1.Font = new Font("微软雅黑", 15, FontStyle.Bold); 65 this.btn_Number1.Cursor = Cursors.Hand; 66 this.btn_Dot1.Visible = false; 67 this.btn_Dot2.Visible = false; 68 if (this.PageCount == 1) 69 { 70 this.btn_privious.Visible = false; 71 this.btn_Next.Visible = false; 72 this.btn_last.Visible = false; 73 this.panel_Main.Controls.Clear(); 74 return; 75 } 76 this.btn_privious.Visible = false; 77 this.btn_Next.Visible = true; 78 79 this.panel_Main.Controls.Clear(); 80 81 for (int i = 2; i <= PageCount; i++) 82 { 83 Button btn = new Button(); 84 btn.Location = new Point(186 + (i - 1) * 42, 1); 85 btn.Name = "btn_Number" + i; 86 btn.Text = i.ToString(); 87 btn.Size = new Size(41, 41); 88 btn.BackColor = Color.White; 89 btn.ForeColor = this.Color; 90 btn.Font = new Font("微软雅黑", 15, FontStyle.Bold); 91 btn.Cursor = Cursors.Hand; 92 this.panel_Main.Controls.Add(btn); 93 btn.Click += new EventHandler(btn_Click); 94 } 95 this.btn_privious.Location = new Point(this.btn_Number1.Location.X - 86, 20); 96 this.btn_Next.Location = new Point(290 + (this.panel_Main.Controls.Count - 1) * 42,20); 97 this.btn_last.Visible = false; 98 } 99 else if(this.PageCount == 6)100 {101 this.IsSixPageCount();102 }103 else if(this.PageCount > 6)104 {105 this.IsExceedSixPageCount();106 }107 108 }109 public void BindData()110 {111 this.btn_privious.Visible = (this.No != 1);112 //this.btn_last.Visible = (this.No != this.PageCount);113 this.btn_Next.Visible = (this.No != this.PageCount);114 if(this.PageChanging != null)115 {116 this.PageChanging(this);117 }118 119 }120 121 public void ChangeColor()122 {123 if (this.No == 1)124 {125 this.btn_Number1.BackColor = this.Color;126 this.btn_Number1.ForeColor = Color.White;127 this.btn_Number1.Font = new Font("微软雅黑", 15, FontStyle.Bold);128 this.btn_Number1.Cursor = Cursors.Hand;129 }130 else131 {132 this.btn_Number1.BackColor = Color.White;133 this.btn_Number1.ForeColor = this.Color;134 this.btn_Number1.Font = new Font("微软雅黑", 15, FontStyle.Bold);135 this.btn_Number1.Cursor = Cursors.Hand;136 }137 if (this.No == PageCount)138 {139 this.btn_last.BackColor = this.Color;140 this.btn_last.ForeColor = Color.White;141 this.btn_last.Font = new Font("微软雅黑", 15, FontStyle.Bold);142 this.btn_last.Cursor = Cursors.Hand;143 }144 else145 {146 this.btn_last.BackColor = Color.White;147 this.btn_last.ForeColor = this.Color;148 this.btn_last.Font = new Font("微软雅黑", 15, FontStyle.Bold);149 this.btn_last.Cursor = Cursors.Hand;150 }151 152 //上一页153 this.btn_privious.BackColor = Color.White;154 this.btn_privious.ForeColor = this.Color;155 this.btn_privious.Font = new Font("微软雅黑", 15, FontStyle.Bold);156 this.btn_privious.Cursor = Cursors.Hand;157 158 159 //下一页160 this.btn_Next.BackColor = Color.White;161 this.btn_Next.ForeColor = this.Color;162 this.btn_Next.Font = new Font("微软雅黑", 15, FontStyle.Bold);163 this.btn_Next.Cursor = Cursors.Hand;164 165 166 foreach (Control c in this.panel_Main.Controls)167 {168 if (c.GetType() == typeof(Button) && c.Name.Contains("Number"))169 {170 int index = c.Name.LastIndexOf(‘r‘);171 if (c.Name.Substring(index + 1, c.Name.Length - index - 1) == this.No.ToString())172 {173 c.BackColor = this.Color;174 c.ForeColor = Color.White;175 c.Font = new Font("微软雅黑", 15, FontStyle.Bold);176 c.Cursor = Cursors.Hand;177 }178 else179 {180 c.BackColor = Color.White;181 c.ForeColor = this.Color;182 c.Font = new Font("微软雅黑", 15, FontStyle.Bold);183 c.Cursor = Cursors.Hand;184 }185 }186 }187 }188 189 //搜索页数小于6页时候,动态生成按钮数字的单机事件190 void btn_Click(object sender, EventArgs e)191 {192 this.No = int.Parse(((Button)sender).Text);193 194 this.btn_privious.Visible = (this.No != 1);//上一页195 //this.btn_last.Visible = (this.No != this.PageCount);196 this.btn_Next.Visible = (this.No != this.PageCount);197 198 this.ChangeColor();199 200 }201 public event PagerHandler PageChanging;202 203 /// <summary>204 /// 当前是第几页205 /// </summary>206 public int No { get; set; }207 208 /// <summary>209 /// 每页记录数,如每页10条记录210 /// </summary>211 /// <param name="sender"></param>212 /// <param name="e"></param>213 214 public int PageSize { get; set; }215 216 217 /// <summary>218 /// 总记录数219 /// </summary>220 /// <param name="sender"></param>221 /// <param name="e"></param>222 223 public int RecordCount { get; set; }224 225 /// <summary>226 /// 总页数227 /// </summary>228 /// <param name="sender"></param>229 /// <param name="e"></param>230 public int PageCount 231 {232 get233 {234 if (this.RecordCount == 0 || this.PageSize == 0)235 {236 return 0;237 }238 if (this.RecordCount % this.PageSize == 0)239 {240 return this.RecordCount / this.PageSize;241 }242 243 return this.RecordCount / this.PageSize + 1;244 }245 }246 247 /// <summary>248 /// 获取分页时候的开始索引249 /// </summary>250 /// <param name="sender"></param>251 /// <param name="e"></param>252 253 public int StartIndex254 {255 get 256 {257 return (this.No - 1) * this.PageSize + 1;258 }259 }260 261 /// <summary>262 /// 获取结束索引263 /// </summary>264 /// <param name="sender"></param>265 /// <param name="e"></param>266 public int EndIndex267 {268 get 269 {270 return this.No * this.PageSize;271 }272 }273 private Color color = Color.FromArgb(0, 153, 96);274 275 public Color Color276 {277 get { return color; }278 set { color = value; }279 }280 private void SimplePager_Load(object sender, EventArgs e)281 {282 283 }284 285 private void btn_privious_Click(object sender, EventArgs e)286 {287 this.No--;288 this.IsSixPageCount();289 this.IsExceedSixPageCount();290 this.ChangeColor();291 this.BindData();292 }293 294 private void IsSixPageCount()295 {296 if (this.PageCount == 6)297 {298 if (this.No == 1)299 {300 this.btn_Number1.BackColor = this.Color;301 this.btn_Number1.ForeColor = Color.White;302 this.btn_Number1.Font = new Font("微软雅黑", 15, FontStyle.Bold);303 this.btn_Number1.Cursor = Cursors.Hand;304 this.btn_Number1.Location = new Point(206, 19);305 306 this.btn_Dot1.Visible = false;307 this.btn_Dot2.Visible = true;308 this.btn_Next.Visible = true;309 310 this.panel_Main.Controls.Clear();311 for (int i = 2; i < 6; i++)312 {313 Button btn6 = new Button();314 btn6.Location = new Point(186 + (i - 1) * 42, 1);315 btn6.Name = "btn_Number" + i;316 btn6.Text = i.ToString();317 btn6.Size = new Size(41, 41);318 btn6.BackColor = Color.White;319 btn6.ForeColor = this.Color;320 btn6.Font = new Font("微软雅黑", 15, FontStyle.Bold);321 btn6.Cursor = Cursors.Hand;322 this.panel_Main.Controls.Add(btn6);323 btn6.Click += (sendar, args) =>324 {325 this.No = int.Parse(((Button)sendar).Text);326 this.IsSixPageCount();327 this.btn_privious.Visible = (this.No != 1);//上一页328 //this.btn_last.Visible = (this.No != this.PageCount);329 this.btn_Next.Visible = (this.No != this.PageCount);330 this.ChangeColor();331 };332 }333 this.btn_Dot2.Location = new Point(290 + (this.panel_Main.Controls.Count - 1) * 42, 19);334 this.btn_privious.Location = new Point(this.btn_Number1.Location.X - 86, 20);335 this.btn_Next.Location = new Point(290 + (this.panel_Main.Controls.Count) * 42, 20);336 this.btn_last.Visible = false;337 }338 }339 if (this.PageCount == 6)340 {341 this.btn_Dot1.Visible = false;342 if (!this.panel_Main.Controls.Contains(this.panel_Main.Controls["btn_Number6"]))343 {344 this.btn_Dot2.Visible = false;345 Button btn = new Button();346 btn.Location = new Point(186 + (6 - 1) * 42, 1);347 btn.Name = "btn_Number" + 6;348 btn.Text = "6";349 btn.Size = new Size(41, 41);350 btn.BackColor = Color.White;351 btn.ForeColor = this.Color;352 btn.Font = new Font("微软雅黑", 15, FontStyle.Bold);353 btn.Cursor = Cursors.Hand;354 this.panel_Main.Controls.Add(btn);355 this.btn_Next.Location = new Point(290 + (this.panel_Main.Controls.Count - 1) * 42, 20);356 btn.Click += (obj, args) =>357 {358 Button btns = (Button)obj;359 this.No = 6;360 this.btn_Next.Visible = false;361 this.ChangeColor();362 };363 }364 if (this.PageCount - this.No > 2)365 {366 Button c = (Button)this.panel_Main.Controls["btn_Number6"];367 c.Visible = false;368 this.btn_Dot2.Visible = true;369 }370 else371 {372 Button c = (Button)this.panel_Main.Controls["btn_Number6"];373 c.Visible = true;374 this.btn_Dot2.Visible = false;375 }376 }377 }378 private void PageStyleOne()379 {380 this.btn_Number1.Location = new Point(206, 19);381 this.panel_Main.Controls.Clear();382 for (int i = 2; i < 6; i++)383 {384 Button btnExceed6 = new Button();385 btnExceed6.Location = new Point(186 + (i - 1) * 42, 1);386 btnExceed6.Name = "btn_Number" + i;387 btnExceed6.Text = i.ToString();388 btnExceed6.Size = new Size(41, 41);389 btnExceed6.BackColor = Color.White;390 btnExceed6.ForeColor = this.Color;391 btnExceed6.Font = new Font("微软雅黑", 15, FontStyle.Bold);392 btnExceed6.Cursor = Cursors.Hand;393 this.panel_Main.Controls.Add(btnExceed6);394 btnExceed6.Click += (sendar, args) =>395 {396 this.No = int.Parse(((Button)sendar).Text);397 this.IsExceedSixPageCount();398 };399 }400 this.btn_Dot1.Visible = false;401 this.btn_Dot2.Visible = true;402 this.btn_Next.Visible = true;403 this.btn_Dot2.Location = new Point(290 + (this.panel_Main.Controls.Count - 1) * 42, 19);404 this.btn_privious.Location = new Point(this.btn_Number1.Location.X - 86, 20);405 this.btn_last.Visible = true;406 this.btn_last.Location = new Point(290 + (this.panel_Main.Controls.Count) * 42, 20);407 this.btn_last.BackColor = Color.White;408 this.btn_last.ForeColor = this.Color;409 this.btn_last.Font = new Font("微软雅黑", 15, FontStyle.Bold);410 this.btn_last.Cursor = Cursors.Hand;411 412 this.btn_Next.Location = new Point(this.btn_last.Location.X + this.btn_last.Width, 20);413 this.ChangeColor();414 }415 private void PageStyleSpecial()416 {417 this.panel_Main.Controls.Clear();418 this.btn_Dot1.Visible = false;419 this.btn_Dot2.Visible = false;420 421 for (int i = this.No - 2; i < this.PageCount; i++)422 {423 Button btning = new Button();424 btning.Location = new Point(186 + (i - 1) * 42, 1);425 btning.Name = "btn_Number" + i;426 btning.Text = i.ToString();427 btning.Size = new Size(41, 41);428 btning.BackColor = Color.White;429 btning.ForeColor = this.Color;430 btning.Font = new Font("微软雅黑", 15, FontStyle.Bold);431 btning.Cursor = Cursors.Hand;432 this.panel_Main.Controls.Add(btning);433 //对动态生成的按钮写单击事件434 btning.Click += (sendar, e) =>435 {436 this.No = int.Parse(((Button)sendar).Text);437 this.btn_privious.Visible = (this.No != 1);//上一页438 //this.btn_last.Visible = (this.No != this.PageCount);439 this.btn_Next.Visible = (this.No != this.PageCount);440 441 this.ChangeColor();442 this.IsExceedSixPageCount();443 };444 }445 //this.btn_Dot2.Location = new Point(290 + (this.panel_Main.Controls.Count - 1) * 42, 19);446 this.btn_privious.Location = new Point(this.btn_Number1.Location.X - 86, 20);447 this.btn_last.Visible = true;448 this.btn_last.Location = new Point(290 + (this.panel_Main.Controls.Count - 1) * 42, 20);449 this.btn_Next.Location = new Point(this.btn_last.Location.X + this.btn_last.Width, 20);450 this.ChangeColor();451 }452 //当页数超过6页时候应该调用的方法453 private void IsExceedSixPageCount()454 {455 if(this.PageCount > 6)456 {457 if (this.No == 1)458 {459 this.PageStyleOne();460 }461 //点击的是最后一页,显示最后5页 无下一页462 else if (this.No == this.PageCount)463 {464 PageStyleLast();465 }466 //非常特殊的情况,刚好分7页,而正好当前页为最中间的第4页467 else if (this.No == 4)468 {469 if (this.PageCount == 7)470 {471 this.PageStyleSpecial();472 }473 //表示点击第4页 页数大于7和点击1时的风格一样474 else475 {476 this.PageStyleOne();477 }478 }479 else if (this.No < 4)//这种情况和this.No == 1的显示方式差不多480 {481 this.PageStyleOne();482 }483 //需要使用点1显示省略部分484 else if (this.No > 4)485 {486 this.btn_Dot1.Visible = true;487 this.btn_Dot1.Location = new Point(this.btn_Number1.Location.X + 42, 19);488 //有第一个省略号,无第二个省略号显示风格为1... 7 8 9 10 11 下一页489 if (this.PageCount - this.No < 4)490 {491 PageStyleDotOne();492 }493 //第一个和第二个省略号都有,上一页1...6,7,8,9,10...24下一页494 else if (this.PageCount - this.No >= 4)495 {496 PageStyleDotOneDotTwo();497 }498 }499 500 }501 }502 503 //还需要继续写代码优化性能504 private void PageStyleLast()505 {506 this.panel_Main.Controls.Clear();507 this.btn_Dot1.Visible = true;508 this.btn_Dot1.Location = new Point(this.btn_Number1.Location.X + 42, 19);509 this.btn_Dot2.Visible = false;510 int j = 0;511 //需要动态计算512 for (int i = this.PageCount - 4; i < this.PageCount; i++)513 {514 Button btning = new Button();515 btning.Location = new Point(this.btn_Dot1.Location.X + j * (33 + this.PageCount.ToString().Length * 10) + 21, 1);516 btning.Name = "btn_Number" + i;517 btning.Text = i.ToString();518 btning.Size = new Size(41, 41);519 btning.BackColor = Color.White;520 btning.ForeColor = this.Color;521 btning.Font = new Font("微软雅黑", 15, FontStyle.Bold);522 btning.Cursor = Cursors.Hand;523 btning.Width = 33 + this.PageCount.ToString().Length * 10;524 this.panel_Main.Controls.Add(btning);525 //对动态生成的按钮写单击事件526 btning.Click += (sendar, e) =>527 {528 this.No = int.Parse(((Button)sendar).Text);529 this.btn_privious.Visible = (this.No != 1);//上一页530 //this.btn_last.Visible = (this.No != this.PageCount);531 this.btn_Next.Visible = (this.No != this.PageCount);532 this.IsExceedSixPageCount();533 };534 j++;535 }536 this.btn_Next.Visible = false;537 this.btn_last.Visible = true;538 this.btn_last.Location = new Point(290 + (this.panel_Main.Controls.Count) * (33 + this.PageCount.ToString().Length * 10), 20);539 this.ChangeColor();540 }541 542 private void PageStyleDotOneDotTwo()543 {544 if (this.panel_Main.Controls.Count != 5)545 {546 this.panel_Main.Controls.Clear();547 int j = 0;548 for (int i = this.No - 2; i <= this.No + 2; i++)549 {550 Button btning = new Button();551 //由于页数过多,需要动态编写按钮的位置552 btning.Location = new Point(this.btn_Dot1.Location.X + j * (33 + (this.No + 2).ToString().Length * 10) + 21, 1);553 btning.Name = "btn_Number" + i;554 btning.Text = i.ToString();555 btning.Size = new Size(41, 41);556 btning.BackColor = Color.White;557 btning.ForeColor = this.Color;558 btning.Font = new Font("微软雅黑", 15, FontStyle.Bold);559 btning.Cursor = Cursors.Hand;560 btning.Width = 33 + (this.No + 2).ToString().Length * 10;561 this.panel_Main.Controls.Add(btning);562 //对动态生成的按钮写单击事件563 btning.Click += (sendar, e) =>564 {565 this.No = int.Parse(((Button)sendar).Text);566 this.btn_privious.Visible = (this.No != 1);//上一页567 //this.btn_last.Visible = (this.No != this.PageCount);568 this.btn_Next.Visible = (this.No != this.PageCount);569 570 this.ChangeColor();571 this.IsExceedSixPageCount();572 };573 j++;574 }575 this.btn_Dot2.Visible = true;576 this.btn_Dot2.Location = new Point(290 + (this.panel_Main.Controls.Count) * (33 + (this.No + 2).ToString().Length * 10), 20);577 this.btn_Dot2.Visible = true;578 this.btn_privious.Location = new Point(this.btn_Number1.Location.X - 86, 20);579 this.btn_last.Visible = true;580 this.btn_last.Location = new Point(this.btn_Dot2.Location.X + this.btn_Dot2.Width, 20);581 this.btn_Next.Location = new Point(this.btn_last.Location.X + (33 + (this.PageCount.ToString().Length) * 10), 20);582 this.ChangeColor();583 }584 else if(this.panel_Main.Controls.Count == 5)585 {586 int j = 0;587 int i = this.No - 2;588 foreach(Control c in this.panel_Main.Controls)589 {590 Button buttoning = c as Button;591 buttoning.Name = "btn_Number" + i;592 buttoning.Text = i.ToString();593 if((this.No + 2)/10 - (this.No - 2)/10 ==1 || (this.No + 2)/10 - (this.No - 2)/10 == 0)594 {595 buttoning.Location = new Point(this.btn_Dot1.Location.X + j * (33 + (this.No + 2).ToString().Length * 10) + 21, 1);596 buttoning.Width = 33 + (this.No + 2).ToString().Length * 10;597 }598 599 this.ClearEvent<Button>(buttoning);600 601 buttoning.Click += (sendar, e) =>602 {603 this.No = int.Parse(((Button)sendar).Text);604 this.btn_privious.Visible = (this.No != 1);//上一页605 //this.btn_last.Visible = (this.No != this.PageCount);606 this.btn_Next.Visible = (this.No != this.PageCount);607 this.IsExceedSixPageCount();608 };609 i++;610 j++;611 }612 613 this.btn_Dot2.Visible = true;614 this.btn_Dot2.Location = new Point(290 + (this.panel_Main.Controls.Count) * (33 + (this.No + 2).ToString().Length * 10), 20);615 this.btn_Dot2.Visible = true;616 this.btn_privious.Location = new Point(this.btn_Number1.Location.X - 86, 20);617 this.btn_last.Visible = true;618 this.btn_last.Location = new Point(this.btn_Dot2.Location.X + this.btn_Dot2.Width, 20);619 this.btn_Next.Location = new Point(this.btn_last.Location.X + (33 + (this.PageCount.ToString().Length) * 10), 20);620 this.ChangeColor();621 }622 }623 624 private void PageStyleDotOne()625 {626 this.btn_Dot2.Visible = false;627 int j = 0;628 if (this.panel_Main.Controls.Count != 4)629 {630 j = 0;631 this.panel_Main.Controls.Clear();632 for (int i = this.PageCount - 4; i < this.PageCount; i++)633 {634 Button btning = new Button();635 btning.Location = new Point(this.btn_Dot1.Location.X + j * (33 + this.PageCount.ToString().Length * 10) + 21, 1);636 btning.Name = "btn_Number" + i;637 btning.Text = i.ToString();638 btning.Size = new Size(41, 41);639 btning.BackColor = Color.White;640 btning.ForeColor = this.Color;641 btning.Font = new Font("微软雅黑", 15, FontStyle.Bold);642 btning.Cursor = Cursors.Hand;643 btning.Width = 33 + this.PageCount.ToString().Length * 10;644 this.panel_Main.Controls.Add(btning);645 //对动态生成的按钮写单击事件646 btning.Click += (sendar, e) =>647 {648 this.No = int.Parse(((Button)sendar).Text);649 this.btn_privious.Visible = (this.No != 1);//上一页650 //this.btn_last.Visible = (this.No != this.PageCount);651 this.btn_Next.Visible = (this.No != this.PageCount);652 this.IsExceedSixPageCount();653 };654 j++;655 }656 this.btn_last.Visible = true;657 this.btn_last.Location = new Point(290 + (this.panel_Main.Controls.Count) * (33 + this.PageCount.ToString().Length * 10), 20);658 this.btn_Next.Visible = true;659 this.btn_Next.Location = new Point(this.btn_last.Location.X + (33 + this.PageCount.ToString().Length * 10), 20);660 this.ChangeColor();661 }662 else663 {664 int i = this.PageCount - 4;665 j = 0;666 foreach(Control c in this.panel_Main.Controls)667 {668 Button btning = c as Button;669 btning.Name = "btn_Number" + i;670 btning.Text = i.ToString();671 this.ClearEvent<Button>(btning);672 btning.Click += (sendar, args) =>673 {674 this.No = int.Parse(((Button)sendar).Text);675 this.btn_privious.Visible = (this.No != 1);//上一页676 //this.btn_last.Visible = (this.No != this.PageCount);677 this.btn_Next.Visible = (this.No != this.PageCount);678 this.IsExceedSixPageCount();679 };680 i++;681 j++;682 }683 this.btn_last.Visible = true;684 this.btn_last.Location = new Point(290 + (this.panel_Main.Controls.Count) * (33 + this.PageCount.ToString().Length * 10), 20);685 this.btn_Next.Visible = true;686 this.btn_Next.Location = new Point(this.btn_last.Location.X + (33 + this.PageCount.ToString().Length * 10), 20);687 this.ChangeColor();688 }689 }690 691 private void btn_Next_Click(object sender, EventArgs e)692 {693 this.No++;694 this.IsSixPageCount();695 this.IsExceedSixPageCount();696 this.ChangeColor();697 this.BindData();698 }699 700 private void btn_display_Click(object sender, EventArgs e)701 {702 //第一页703 this.No = 1;704 this.BindData();705 this.IsSixPageCount();706 707 this.IsExceedSixPageCount();708 this.ChangeColor();709 }710 711 private void btn_last_Click(object sender, EventArgs e)712 {713 this.No = this.PageCount;714 this.BindData();715 this.IsSixPageCount();716 this.IsExceedSixPageCount();717 this.ChangeColor();718 }719 #region 传入控件就对控件的所有事件委托清空的方法720 public void ClearEvent<T>(Control Ctl)721 {722 Delegate[] invokeList = GetObjectEvenList(Ctl, "EventClick");723 if (invokeList != null)724 {725 foreach (Delegate del in invokeList)726 {727 typeof(T).GetEvent("Click").RemoveEventHandler(Ctl, del);728 }729 }730 }731 /// <summary>732 /// 获取控件事件733 /// </summary>734 /// <param name="p_Control">对象</param>735 /// <param name="p_EventName">事件名</param>736 /// <returns>委托列</returns>737 public Delegate[] GetObjectEvenList(Control p_Control, string p_EventName)738 {739 PropertyInfo PropertyInfo = p_Control.GetType().GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);740 if (PropertyInfo != null)741 {742 object EventList = PropertyInfo.GetValue(p_Control, null);743 if (EventList != null && EventList is EventHandlerList)744 {745 EventHandlerList List = (EventHandlerList)EventList;746 FieldInfo FieldInfo = (typeof(Control)).GetField(p_EventName, BindingFlags.Static | BindingFlags.NonPublic);747 if (FieldInfo == null)748 {749 return null;750 }751 Delegate ObjectDeletegate = List[FieldInfo.GetValue(p_Control)];752 if (ObjectDeletegate == null)753 {754 return null;755 }756 757 return ObjectDeletegate.GetInvocationList();758 }759 }760 return null;761 }762 #endregion763 }764 }
学完委托,事件后的练手分页控件,有不足之处请指出。分页上10万条数据后会有延迟,不知道用多线程处理会不会更好,本人小菜鸟一个
winform窗体自定义控件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。