<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      跟我學做c#皮膚美化(八)--Textbox

      效果預覽

          還是先看看最終的效果圖(和QQ登陸中的輸入框效果差不多):

      查看 TextboxEx效果

       

             效果說明: 1.實現了水印的效果 2.實現了鼠標移上去的時候周圍產生輝光 3.輸入前端可以設置圖片

      實現輝光效果

          整體說明:

                前面顯示的那個圖片我采用的是一個picturebox,當然如果你愿意也可以自己畫(后續的“button再探討”中就采用的是自己畫的方式)。圖片后面的輸入文本框采用的是textbox控件,這樣一來就避免了許多繪制textbox的麻煩(我一開始打算自己繪制用戶輸入的字符的,不過發現不理想)。然后邊框和輝光都是畫出來的。

       

         具體實現:

                先拋開水印不說。最重要的就是重寫的OnPaint方法,如下:

      代碼
              protected override void OnPaint(PaintEventArgs e)
              {
                  Graphics g = e.Graphics;
                  g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                  g.SmoothingMode = SmoothingMode.HighQuality;
      
                  CalculateSizeAndPosition();
                  Draw(e.ClipRectangle, e.Graphics);
      
                  base.OnPaint(e);
              }

       

      可以看出里面調用了兩個方法,做過前面窗體換膚的可能對這個不陌生。就是繪畫之前計算好所有的位置大小信息,然后再調用draw畫出來。那么這次的calculateSizeAndPosition又做了什么呢?2點!1.判斷是否有前端圖片需要顯示,2.判斷是否處于multiline模式。代碼如下:

      代碼
              private void CalculateSizeAndPosition()
              {
                  if (ForeImage != null)
                  {
                      //圖片大小固定為16
                      pic.Height = pic.Width = 16;
                      pic.Top = pic.Left = 3;
                      txt.Width = Width - pic.Width - 12;
                      txt.Location = new Point(16 + 3 + 3, 6);
                  }
                  else
                  {
                      pic.Left = -40;  //隱藏圖片
                        txt.Width = Width - 9;
                      txt.Location = new Point(3, 6);
                  }
      
                  //單行
                   if (!txt.Multiline)
                  {
                      Height = txt.Height + 9;
                  }
                  else
                  {
                      txt.Height = Height - 9;  //如果是多行則設置實際里面的輸入文本框的高度
                  }
              }

      當所有的東西都計算好了,我們就可以安心的拿起我們的畫筆竟然繪畫了。先畫什么?再畫什么?請看代碼:

      代碼
              private void Draw(Rectangle rectangle, Graphics g)
              {
      
                  #region 畫背景
                  using (SolidBrush backgroundBrush = new SolidBrush(Color.White))
                  {
                      g.FillRectangle(backgroundBrush, 2, 2, this.Width - 5, this.Height -4);
                  }
                  #endregion
      
                  #region 畫陰影(外邊框)
      
                  Color drawShadowColor = _shadowColor;
                  if (!_isFouse)    //判斷是否獲得焦點
                  {
                      drawShadowColor = Color.Transparent;
                  }
                  using (Pen shadowPen = new Pen(drawShadowColor))
                  {
                      if (_radius == 0)
                      {
                          g.DrawRectangle(shadowPen, new Rectangle(rectangle.X, rectangle.Y, rectangle.Width - 1, rectangle.Height - 1));
                      }
                      else
                      {
                          g.DrawPath(shadowPen, DrawHelper.DrawRoundRect(rectangle.X, rectangle.Y, rectangle.Width - 2, rectangle.Height - 1, _radius));
                      }
                  }
                  #endregion
      
                  #region 畫邊框
                  using (Pen borderPen = new Pen(_borderColor))
                  {
                      if (_radius == 0)
                      {
                          g.DrawRectangle(borderPen, new Rectangle(rectangle.X + 1, rectangle.Y + 1, rectangle.Width - 3, rectangle.Height - 3));
                      }
                      else
                      {
                          g.DrawPath(borderPen, DrawHelper.DrawRoundRect(rectangle.X + 1, rectangle.Y + 1, rectangle.Width - 3, rectangle.Height - 2, _radius));
                      }
                  }
                  #endregion
              }

       

      在這個方法里面主要畫了三個東西,大家看注釋也知道了,分別是:背景,邊框,輝光。要注意的就是這里面的微小距離要設置好,我也改了好幾次才設置正確。在畫邊框和輝光的時候,因為實現了圓角邊框所以要對圓角度進行判斷。

      現在繪畫的方法也做好了,接下來就是出發重繪的事件了。不然它也不會自動幫你繪畫啊^_^。顯然當鼠標移上去和移出去的時候需要重新繪畫。那我們就在下面幾個方法中引發重繪事件:

      代碼
              private void TextBoxEx2_MouseEnter(object sender, EventArgs e)
              {
                  _isFouse = true;
                  this.Invalidate();
              }
      
              private void TextBoxEx2_MouseLeave(object sender, EventArgs e)
              {
                  _isFouse = false;
                  this.Invalidate();
              }

       

      代碼很簡單,不解釋。

      基本上面的做好了,大部分就完成了。下面我們完成水印的功能。至此,textbox美化講解完畢,希望對你有幫助

      實現水印效果

            水印我是這樣子實現的:當用戶離開輸入焦點的時候檢測當前用戶有沒有輸入字符,如果沒有輸入則改變輸入框的顏色(灰色),然后看起來就像是水印的感覺啦。我們專門寫了一個函數來設置水印,如下:

      代碼
              private void SetWaterMark()
              {
                  if (_waterMark != null && (txt.Text == " " || txt.Text == @"" + WaterMark))   //用戶沒有輸入
                  {    
                      txt.ForeColor = _waterMarkColor;
                      txt.Text = @"" + WaterMark;
                  }
                  else
                  {
                      txt.ForeColor = ForeColor;
                  }
              }

       

      然后在什么地方調用呢?剛才上面也已經說了當用戶離開焦點的時候判斷,不過用戶獲得輸入焦點的時候我們還要設置一下,如果當前的文本時水印的話就清空文本等待輸入:

            
              private void Txt_GotFocus(object sender, EventArgs e)
              {
                  if (txt.Text == @"" + WaterMark)
                  {
                      //獲得焦點,切換正常文字等待填寫
                      txt.ForeColor = ForeColor;
                      txt.Text = " ";
                  }
              }
      
              private void Txt_LostFocus(object sender, EventArgs e)
              {
                  SetWaterMark();
              }

       

      這里還有一點需要注意的是,在pageload里面我們也需要調用一下setwatermark方法,不然它一開始是不會顯示滴!

       

      源代碼快照
      代碼

       Demo下載

      posted @ 2010-11-30 21:35  qianlifeng  閱讀(21385)  評論(92)    收藏  舉報
      主站蜘蛛池模板: 少妇被粗大的猛烈进出视频| 国产成人精品一区二区| 成人做受120秒试看试看视频| 久久精品国产亚洲av麻豆小说| 精品无码一区在线观看| 亚洲日本一区二区三区在线播放| 亚洲av优女天堂熟女久久| 在线高清理伦片a| 成人午夜大片免费看爽爽爽 | 国产一精品一av一免费| 荆州市| gogogo高清在线观看视频中文| 四虎永久免费高清视频| 无码人妻精品一区二区三 | 狠狠久久五月综合色和啪| 欧美国产日产一区二区| 久久天堂无码av网站| 久久久精品94久久精品| 欧洲熟妇色自偷自拍另类| 欧美性受xxxx白人性爽| 中文字幕精品亚洲字幕成| 2021国产成人精品久久| 平果县| 天堂网在线.www天堂在线资源| 边添小泬边狠狠躁视频| 老司机精品成人无码AV| 日本中文字幕有码在线视频| 精品久久久久久无码人妻蜜桃 | 91在线视频视频在线| 在线中文字幕国产一区| 亚洲国产日韩欧美一区二区三区| 亚洲精品国产精品国自产| 亚洲成人精品在线伊人网| 蜜桃无码一区二区三区| 日韩精品不卡一区二区三区| 国产国拍亚洲精品永久软件| 一区二区三区精品不卡| 综合久青草视频在线观看| 人妻久久久一区二区三区| 中文字幕 日韩 人妻 无码| 亚洲精品美女久久7777777|