C# winform中自定义的翻页控件,自己设计,供大家参考,具体内容如下
1.主要是使用控件绑定点击事件
用到的控件分别为pictureBox lable 上一页pbPage_Prev 下一页 pbPage_Next 首页 pbPage_Begin 尾页pbPage_End 是pictureBox控件加背景图
“第 页/ 共 页” 是一个lable “labPageInfo” 在lable上面加了一个隐藏的textBox 控件 “txtPageInfo”
2.将这个翻页的功能单独写在用户控件 ucPageTurn 里面 然后在每个页面直接应用就可以了
下面只是把ucPageTurn写了出来
还需要在winform页面上应用上
using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.linq;using System.Text;using System.windows.Forms;namespace Demo{ public partial class ucPageTurn : UserControl,IMessageFilter { private const int SIZE_HEIGHT = 40; private const int SIZE_MINWIDTH = 84; private const int SIZE_INFO_MINWIDTH = 188; public ucPageTurn() { Application.AddMessageFilter(this); InitializeComponent(); this.borderStyle = System.windows.Forms.borderStyle.None; this.MinimumSize = new Size(SIZE_MINWIDTH,0); this.disposed += new EventHandler(ucPages_disposed); //this.MouseClick += new MouseEventHandler(ucKeyboard_Close); PageChanged += new PageChangedHandle(new PageChangedHandle((oldPage,newPage,e) => { })); inputGotFocus += new inputFocusHandle(new inputFocusHandle((sender,e) => { })); //inputLostFocus += new inputFocusHandle(new inputFocusHandle((sender,e) => { })); inputGotFocus += new inputFocusHandle(new inputFocusHandle((sender,e) => { })); inputLostFocus += new inputFocusHandle(new inputFocusHandle((sender,e) => { })); inputMouseDown += new inputMouseHandle(new inputMouseHandle((sender,e) => { })); inputMouseUp += new inputMouseHandle(new inputMouseHandle((sender,e) => { })); inputTextClick += new EventHandler(new EventHandler((sender,e) => { })); inputKeyDown += new inputKeyHandle(new inputKeyHandle((sender,e) => { })); inputKeyUp += new inputKeyHandle(new inputKeyHandle((sender,e) => { })); inputKeyPress += new inputKeyPressHandle(new inputKeyPressHandle((sender,e) => { })); inputTextChanged += new EventHandler(new EventHandler((sender,e) => { })); this.Backcolor = color.White; labPageInfo.Backcolor = this.Backcolor; this.Resize += new EventHandler(ucPages_Resize); //labPageInfo.MouseDoubleClick += new MouseEventHandler(labPageInfo_MouseDoubleClick); pbPage_Prev.MouseDown += new MouseEventHandler(pbPage_Prev_MouseDown); pbPage_Prev.MouseUp += new MouseEventHandler(pbPage_Prev_MouseUp); pbPage_Next.MouseDown += new MouseEventHandler(pbPage_Next_MouseDown); pbPage_Next.MouseUp += new MouseEventHandler(pbPage_Next_MouseUp); pbPage_Begin.MouseDown += new MouseEventHandler(pbPage_Begin_MouseDown); pbPage_Begin.MouseUp += new MouseEventHandler(pbPage_Begin_MouseUp); pbPage_End.MouseDown += new MouseEventHandler(pbPage_End_MouseDown); pbPage_End.MouseUp += new MouseEventHandler(pbPage_End_MouseUp); txtPageInfo.TextChanged += new EventHandler(txtPageInfo_TextChanged); txtPageInfo.GotFocus += new EventHandler(txtPageInfo_GotFocus); txtPageInfo.Click += new EventHandler(txtPageInfo_Click); txtPageInfo.Text = m_strText; txtPageInfo.Visible = m_blnShowTxtPageInfo; m_blnIsautoJump = false; m_timerAutopage.Enabled = false; m_timerAutopage.Interval = WAIT_FOR_autoJUMP; m_timerAutopage.Tick += new EventHandler(timerAutopage_Tick); } private voID ucPages_Load(object sender,EventArgs e) { setStatus(); } private voID ucPages_disposed(object sender,EventArgs e) { Application.RemoveMessageFilter(this); } public bool PreFilterMessage(ref System.windows.Forms.Message MyMessage) { if (MyMessage.Msg == 0x204 || MyMessage.Msg == 0x205) { return true; } return false; } //设置控件的自适应大小 private voID ucPages_Resize(object sender,EventArgs e) { this.Height = SIZE_HEIGHT; pbPage_Begin.Location = new Point(0,0); pbPage_Begin.Size = new Size(SIZE_HEIGHT,SIZE_HEIGHT); pbPage_Prev.Location = new Point(pbPage_Begin.WIDth + 2,pbPage_Begin.top); pbPage_Prev.Size = pbPage_Begin.Size; pbPage_End.Location = new Point(this.WIDth - pbPage_End.WIDth,pbPage_Begin.top); pbPage_End.Size = pbPage_Begin.Size; pbPage_Next.Location = new Point(this.WIDth - pbPage_Next.WIDth - pbPage_End.WIDth - 2,pbPage_Begin.top); pbPage_Next.Size = pbPage_Begin.Size; if (this.WIDth < SIZE_INFO_MINWIDTH) { labPageInfo.Visible = false; txtPageInfo.Visible = false; } else { labPageInfo.Location = new Point(pbPage_Prev.WIDth + pbPage_Prev.WIDth + 3,2); labPageInfo.Size = new Size(pbPage_Next.left - labPageInfo.left - 3,pbPage_Prev.Height); txtPageInfo.Location = new Point(pbPage_Prev.left + pbPage_Prev.WIDth + 5,11); //txtPageInfo.Size = new Size(pbPage_Next.left - labPageInfo.left,15); if (m_blnShowLabel && !labPageInfo.Visible) labPageInfo.Visible = true; if (m_blnShowLabel && !txtPageInfo.Visible) txtPageInfo.Visible = true; } if (m_blnShowTxtPageInfo) { txtPageInfo.Size = new Size(79,labPageInfo.Height); } else { txtPageInfo.Size = new Size(0,labPageInfo.Height); } } //点击lablelabPageInfo 显示txtPageInfo private voID labPageInfo_Click(object sender,EventArgs e) { if (!txtPageInfo.Visible) { showJumpPageStatus(true); inputTextClick(txtPageInfo,new EventArgs()); } else { showJumpPageStatus(false); } } public voID showJumpPageStatus(Boolean isShow) { if (isShow) { txtPageInfo.Visible = true; txtPageInfo.Text = string.Empty; txtPageInfo.Focus(); } else { txtPageInfo.Visible = false; } } //上一页 private voID pbPage_Prev_MouseDown(object sender,MouseEventArgs e) { pbPage_Prev.Image = global::Pku.CFM.Controls.PropertIEs.Resources.Page_Prev_D; m_blnIsPrevDown = true; m_timerAutopage.Enabled = true; } private voID pbPage_Prev_MouseUp(object sender,MouseEventArgs e) { pbPage_Prev.Image = global::Pku.CFM.Controls.PropertIEs.Resources.Page_Prev_N; m_blnIsPrevDown = false; if (m_blnIsautoJump) { leaveautoJumpMode(); return; } m_timerAutopage.Enabled = false; if (1 == m_intCurPageIndex) return; int intoldPage = m_intCurPageIndex; m_intCurPageIndex--; setStatus(); PageChanged(intoldPage,m_intCurPageIndex,new EventArgs()); } //下一页 private voID pbPage_Next_MouseDown(object sender,MouseEventArgs e) { pbPage_Next.Image = global::Pku.CFM.Controls.PropertIEs.Resources.Page_Next_D; m_blnIsNextDown = true; m_timerAutopage.Enabled = true; } private voID pbPage_Next_MouseUp(object sender,MouseEventArgs e) { pbPage_Next.Image = global::Pku.CFM.Controls.PropertIEs.Resources.Page_Next_N; m_blnIsNextDown = false; if (m_blnIsautoJump) { leaveautoJumpMode(); return; } m_timerAutopage.Enabled = false; if (m_intPageCount == m_intCurPageIndex) return; int intoldPage = m_intCurPageIndex; m_intCurPageIndex++; setStatus(); PageChanged(intoldPage,new EventArgs()); } //首页 private voID pbPage_Begin_MouseDown(object sender,MouseEventArgs e) { pbPage_Begin.Image = global::Pku.CFM.Controls.PropertIEs.Resources.PageVIEw_Begin_D; m_blnIsBeginDown = false; m_timerAutopage.Enabled = true; } private voID pbPage_Begin_MouseUp(object sender,MouseEventArgs e) { pbPage_Begin.Image = global::Pku.CFM.Controls.PropertIEs.Resources.PageVIEw_Begin_N; m_blnIsBeginDown = false; int intoldPage = m_intCurPageIndex; if (1 == m_intCurPageIndex) return; m_intCurPageIndex = 1; setStatus(); PageChanged(intoldPage,new EventArgs()); m_blnIsautoJump = false; m_timerAutopage.Stop(); } //尾页 private voID pbPage_End_MouseDown(object sender,MouseEventArgs e) { pbPage_End.Image = global::Pku.CFM.Controls.PropertIEs.Resources.PageVIEw_End_N; m_blnIsEndDown = true; m_timerAutopage.Enabled = true; } private voID pbPage_End_MouseUp(object sender,MouseEventArgs e) { pbPage_End.Image = global::Pku.CFM.Controls.PropertIEs.Resources.PageVIEw_End_D; m_blnIsEndDown = false; int intoldPage = m_intCurPageIndex; if (m_intCurPageIndex == m_intPageCount)return; m_intCurPageIndex = m_intPageCount; setStatus(); PageChanged(intoldPage,new EventArgs()); m_blnIsautoJump = false; m_timerAutopage.Stop(); } //翻页按钮的状态 private voID setStatus() { //如果页数为0,翻页的按钮全部不显示 if (m_intPageCount <= 0) { labPageInfo.Text = ""; pbPage_Prev.Visible = false; pbPage_Next.Visible = false; pbPage_Begin.Visible = false; pbPage_End.Visible = false; txtPageInfo.Visible = false; } else { //如果页数为1,翻页的按钮不显示 if (1 == m_intPageCount) { labPageInfo.Text = ""; pbPage_Prev.Visible = false; pbPage_Next.Visible = false; pbPage_Begin.Visible = false; pbPage_End.Visible = false; txtPageInfo.Visible = false; } else { //只显示下一页和最后一页的按钮 if (m_intCurPageIndex <= 1) { m_intCurPageIndex = 1; pbPage_Prev.Visible = false; pbPage_Next.Visible = true; pbPage_Begin.Visible = false; pbPage_End.Visible = true; txtPageInfo.Visible = false; } //只显示上一页和首页的按钮 else if (m_intCurPageIndex >= m_intPageCount) { m_intCurPageIndex = m_intPageCount; pbPage_Prev.Visible = true; pbPage_Next.Visible = false; pbPage_Begin.Visible = true ; pbPage_End.Visible = false; txtPageInfo.Visible = false; } //否则按钮全部显示 else { pbPage_Prev.Visible = true; pbPage_Next.Visible = true; pbPage_Begin.Visible = true; pbPage_End.Visible = true; txtPageInfo.Visible = false; } labPageInfo.Text = String.Format("第{0}页 /共{1}页",m_intPageCount); txtPageInfo.Text = String.Format("{0}",m_intCurPageIndex); } } } private voID timerAutopage_Tick(object sender,EventArgs e) { if ((m_blnIsNextDown && m_intCurPageIndex >= m_intPageCount) || (m_blnIsPrevDown && m_intCurPageIndex <= 1) || (m_blnIsEndDown && m_intCurPageIndex >=m_intPageCount) || (m_blnIsBeginDown && m_intCurPageIndex<=1)) { leaveautoJumpMode(); return; } if (!m_blnIsautoJump) m_timerAutopage.Interval = autoJUMP_INV; int intoldPage = m_intCurPageIndex; if (m_blnIsNextDown) m_intCurPageIndex++; if (m_blnIsPrevDown) m_intCurPageIndex--; setStatus(); PageChanged(intoldPage,new EventArgs()); if ((m_blnIsNextDown && m_intCurPageIndex >= m_intPageCount) || (m_blnIsPrevDown && m_intCurPageIndex <= 1)||(m_blnIsEndDown && m_intCurPageIndex >= m_intPageCount) || (m_blnIsBeginDown && m_intCurPageIndex <= 1)) { leaveautoJumpMode(); } else { m_blnIsautoJump = true; } } private voID leaveautoJumpMode() { m_blnIsautoJump = false; m_timerAutopage.Stop(); m_timerAutopage.Enabled = false; m_timerAutopage.Interval = WAIT_FOR_autoJUMP; } private int m_intCurPageIndex = 0; //当前页面 public int CurPageIndex { get { return m_intCurPageIndex; } set { if (value < 0 || (m_intPageCount> 0 && value > m_intPageCount)) return; int intoldPage = m_intCurPageIndex; m_intCurPageIndex = value; setStatus(); if (!m_blnIgnoreChange) PageChanged(intoldPage,new EventArgs()); m_blnIsautoJump = false; m_timerAutopage.Stop(); m_timerAutopage.Enabled = false; } } //计算总页数 public int PageCount { get { return m_intPageCount; } set { m_intPageCount = value; if (m_intPageCount > 0) { if (m_intCurPageIndex <= 0) m_intCurPageIndex = 0; if (m_intCurPageIndex > m_intPageCount) { m_intCurPageIndex = m_intPageCount; } } else { m_intCurPageIndex = 0; } setStatus(); } } private Boolean m_blnIgnoreChange = false; public Boolean IgnoreChange { get { return m_blnIgnoreChange; } set { m_blnIgnoreChange = value; } } private Boolean m_blnShowLabel = true; public Boolean ShowLabel { get { return m_blnShowLabel; } set { m_blnShowLabel = value; labPageInfo.Visible = value; } } private voID txtPageInfo_TextChanged(object sender,EventArgs e) { if (m_blnIgnTextChange) return; m_blnIgnTextChange = true; inputTextChanged(sender,e); } private voID txtPageInfo_GotFocus(object sender,EventArgs e) { inputGotFocus(this,e); } private voID txtPageInfo_LostFocus(object sender,EventArgs e) { inputLostFocus(this,e); } private voID txtPageInfo_MouseDown(object sender,MouseEventArgs e) { inputMouseDown(sender,e); } private voID txtPageInfo_MouseUp(object sender,MouseEventArgs e) { inputMouseUp(sender,e); } private voID txtPageInfo_Click(object sender,EventArgs e) { inputTextClick(sender,e); } private voID txtPageInfo_KeyDown(object sender,KeyEventArgs e) { inputKeyDown(sender,e); } private voID txtPageInfo_KeyUp(object sender,KeyEventArgs e) { inputKeyUp(sender,e); } private voID txtPageInfo_KeyPress(object sender,KeyPressEventArgs e) { inputKeyPress(sender,e); } private string m_strText = ""; public String Text { get { return m_strText; } set { m_strText = value; } } private System.windows.Forms.Timer m_timerAutopage = new Timer(); private bool m_blnIsPrevDown = false; private bool m_blnIsNextDown = false; private bool m_blnIsBeginDown = false; private bool m_blnIsEndDown = false; private bool m_blnIsautoJump = false; public delegate voID PageChangedHandle(int oldPage,int newPage,EventArgs e); public event PageChangedHandle PageChanged; private const int WAIT_FOR_autoJUMP = 500; private const int autoJUMP_INV = 500; private int m_intPageCount = 0; protected String m_strErrorText = ""; public String ErrorText { get { return m_strErrorText; } set { m_strErrorText = value; } } /// <summary> /// 键盘控件的父对象 /// </summary> private Control m_keyboardParent = null; public Control KeyboardParent { get { return m_keyboardParent; } set { m_keyboardParent = value; } } /// <summary> /// 是否显示输入翻页框按钮 /// </summary> private Boolean m_blnShowTxtPageInfo = true; public Boolean ShowTxtPageInfo { get { return m_blnShowTxtPageInfo; } set { m_blnShowTxtPageInfo = value; txtPageInfo.Visible = value; } } //public bool IsPages { get; set; } private bool m_blnIgnTextChange = false; private Boolean m_blnIsinputFocus = false; //public event EventHandler inputEnterpressed; //public event EventHandler inputClearpressed; public delegate voID inputFocusHandle(object sender,EventArgs e); public event inputFocusHandle inputGotFocus; public event inputFocusHandle inputLostFocus; public delegate voID inputMouseHandle(object sender,MouseEventArgs e); public event inputMouseHandle inputMouseDown; public event inputMouseHandle inputMouseUp; public event EventHandler inputTextClick; public delegate voID inputKeyHandle(object sender,KeyEventArgs e); public event inputKeyHandle inputKeyDown; public event inputKeyHandle inputKeyUp; //public event inputKeyHandle inputTextKeyBoardEnter; public delegate voID inputKeyPressHandle(object sender,KeyPressEventArgs e); public event inputKeyPressHandle inputKeyPress; public event EventHandler inputTextChanged; public TextBox inputTextBox { set { txtPageInfo=value; } get { return txtPageInfo; } } public String inputText { get { if (m_strText == txtPageInfo.Text || String.IsNullOrWhiteSpace(txtPageInfo.Text)) { return String.Empty; } else { return txtPageInfo.Text; } } set { if (m_blnIsinputFocus) { txtPageInfo.Text = value; } else { if (String.IsNullOrWhiteSpace(value)) { m_blnIgnTextChange = true; txtPageInfo.Text = m_strText; m_blnIgnTextChange = false; } } } } public voID setinputText(String text) { txtPageInfo.Text = text; } }}
3. 你在资源管文件里面创建的control 文件夹里面,创建了一个用户控件ucPageTurn ,那么在工具栏里面会自动显示你刚刚写的ucPageTurn组件,把它拖到页面上 ,将这个组件的名字叫做ucPages,这样ucpageturn里面的控件就可以进行编辑
//在initControls里面添加textBox输入框的事件 private voID initControls() { ucPages.inputTextBox.KeyPress +=new KeyPressEventHandler(ucPages_KeyPress); ucPages.PageChanged += new Pku.CFM.Controls.ucPageTurn.PageChangedHandle(ucPages_PageChanged);} private voID ucPages_KeyPress(object sender,KeyPressEventArgs e) { if (13 == e.KeyChar) { int intReturn = Sysdefine.nothing; String strinputText = ucPages.Text.toupper(); if (Sysdefine.Failed == intReturn) { MessageBox.Show(this.ErrorText,"信息",MessageBoxbuttons.OK,MessageBoxIcon.Warning); } String pageinputText = ucPages.inputText; int page = 0; try { page = int.Parse(pageinputText); } catch { page = 1; } ucPages.CurPageIndex = page; if (Sysdefine.Failed == refreshList(page,strinputText)) { MessageBox.Show(this.ErrorText,MessageBoxIcon.Warning); } } } private voID ucPages_PageChanged(int oldPage,EventArgs e) { int intReturn = Sysdefine.nothing; String strinputText = ucPages.Text.toupper(); intReturn = refreshList(newPage,strinputText); if (Sysdefine.Failed == intReturn) { MessageBox.Show(this.ErrorText,MessageBoxIcon.Warning); return; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的C# winform自定义翻页控件详解全部内容,希望文章能够帮你解决C# winform自定义翻页控件详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)