好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C# winform自定义翻页控件详解

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测试数据ponentmodel;

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, m_intcurpageindex, 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, m_intcurpageindex, 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, m_intcurpageindex, 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_intcurpageindex, 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, m_intcurpageindex, 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, m_intcurpageindex, 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, "信息" , messageboxbuttons.ok, messageboxicon.warning);

     }

    }

   }

 

  private void ucpages_pagechanged( int oldpage, int newpage, eventargs e)

   {

    int intreturn = sysdefine.nothing;

 

    string strinputtext = ucpages.text.toupper();

    intreturn = refreshlist(newpage, strinputtext);

    if (sysdefine.failed == intreturn)

    {

     messagebox.show( this .errortext, "信息" , messageboxbuttons.ok, messageboxicon.warning);

     return ;

    }

   }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://HdhCmsTestcnblogs测试数据/anthonyboss/archive/2017/09/12/7509080.html

dy("nrwz");

查看更多关于C# winform自定义翻页控件详解的详细内容...

  阅读:50次