1. 程式人生 > >WinForm中重繪滾動條以及用重繪的滾動條控制ListBox的滾動

WinForm中重繪滾動條以及用重繪的滾動條控制ListBox的滾動

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Drawing;
  5 using System.Data;
  6 using System.Text;
  7 using System.Windows.Forms;
  8 using System.Windows.Forms.Design;
  9 using System.Diagnostics;
 10 namespace Winamp
 11 {
 12
     [Designer(typeof(ScrollbarControlDesigner))]
 13 publicpartialclass CustomScrollbar : UserControl
 14     {
 15  16 protected Color moChannelColor = Color.Empty;
 17 protected Image moUpArrowImage =null;
 18 protected Image moDownArrowImage =null;
 19 protected Image moThumbArrowImage =null
;
 20  21 protected Image moThumbTopImage =null;
 22 protected Image moThumbTopSpanImage =null;
 23 protected Image moThumbBottomImage =null;
 24 protected Image moThumbBottomSpanImage =null;
 25 protected Image moThumbMiddleImage =null;
 26  27 protectedint moLargeChange =10;
 28 protectedint moSmallChange 
=1;
 29 protectedint moMinimum =0;
 30 protectedint moMaximum =100;
 31 protectedint moValue =0;
 32 privateint nClickPoint;
 33  34 protectedint moThumbTop =0;
 35  36 protectedbool moAutoSize =false;
 37  38 privatebool moThumbDown =false;
 39 privatebool moThumbDragging =false;
 40  41 publicnewevent EventHandler Scroll =null;
 42 publicevent EventHandler ValueChanged =null;
 43  44 privateint GetThumbHeight()
 45         {
 46 int nTrackHeight = (this.Height - (UpArrowImage.Height + DownArrowImage.Height));
 47 float fThumbHeight = ((float)LargeChange / (float)Maximum) * nTrackHeight;
 48 int nThumbHeight = (int)fThumbHeight;
 49  50 if (nThumbHeight > nTrackHeight)
 51             {
 52                 nThumbHeight = nTrackHeight;
 53                 fThumbHeight = nTrackHeight;
 54             }
 55 if (nThumbHeight <56)
 56             {
 57                 nThumbHeight =56;
 58                 fThumbHeight =56;
 59             }
 60  61 return nThumbHeight;
 62         }
 63  64 public CustomScrollbar()
 65         {
 66  67             InitializeComponent();
 68             SetStyle(ControlStyles.ResizeRedraw, true);
 69             SetStyle(ControlStyles.AllPaintingInWmPaint, true);
 70             SetStyle(ControlStyles.DoubleBuffer, true);
 71  72             moChannelColor = Color.FromArgb(511663);
 73             UpArrowImage = BASSSkin.uparrow;
 74             DownArrowImage = BASSSkin.downarrow;
 75  76  77             ThumbBottomImage = BASSSkin.ThumbBottom;
 78  79             ThumbMiddleImage = BASSSkin.ThumbMiddle;
 80  81 this.Width = UpArrowImage.Width;
 82 base.MinimumSize =new Size(UpArrowImage.Width, UpArrowImage.Height + DownArrowImage.Height + GetThumbHeight());
 83         }
 84  85         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true), DefaultValue(false), Category("Behavior"), Description
 86  87 ("LargeChange")]
 88 publicint LargeChange
 89         {
 90 get { return moLargeChange; }
 91 set 92             {
 93                 moLargeChange = value;
 94                 Invalidate();
 95             }
 96         }
 97  98         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true), DefaultValue(false), Category("Behavior"), Description
 99 100 ("SmallChange")]
101 publicint SmallChange
102         {
103 get { return moSmallChange; }
104 set105             {
106                 moSmallChange = value;
107                 Invalidate();
108             }
109         }
110 111         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true), DefaultValue(false), Category("Behavior"), Description("Minimum")]
112 publicint Minimum
113         {
114 get { return moMinimum; }
115 set116             {
117                 moMinimum = value;
118                 Invalidate();
119             }
120         }
121 122         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true), DefaultValue(false), Category("Behavior"), Description("Maximum")]
123 publicint Maximum
124         {
125 get { return moMaximum; }
126 set127             {
128                 moMaximum = value;
129                 Invalidate();
130             }
131         }
132 133         [EditorBrowsable(EditorBrowsableState.Always), Browsable(true), DefaultValue(false), Category("Behavior"), Description("Value")]
134 publicint Value
135         {
136 get { return moValue; }
137 set138             {
139                 moValue = value;
140 141 int nTrackHeight = (this.Height - (UpArrowImage.Height + DownArrowImage.Height));
142 float fThumbHeight = ((float)LargeChange / (float)Maximum) * nTrackHeight;
143 int nThumbHeight = (int)fThumbHeight;
144 145 if (nThumbHeight > nTrackHeight)
146                 {
147                     nThumbHeight = nTrackHeight;
148                     fThumbHeight = nTrackHeight;
149                 }
150 if (nThumbHeight <56)
151                 {
152                     nThumbHeight =56;
153                     fThumbHeight =56;
154                 }
155 156 157 int nPixelRange = nTrackHeight - nThumbHeight;
158 int nRealRange = (Maximum - Minimum) - LargeChange;
159 float fPerc =0.0f;
160 if (nRealRange !=0)
161                 {
162                     fPerc = (float)moValue / (float)nRealRange;
163 164                 }
165 

相關推薦

WinForm滾動以及滾動控制ListBox滾動

  1 using System;   2 using System.Collections.Generic;   3 using System.ComponentModel;   4 using System.Drawing;   5 using System.Data;   6 using Sy

asp頁面url在頁面傳值亂碼問題以及js獲得url傳來引數

第一:在url中放入引數: var txtName = (“#” + name).val();          alert(txtName);(“#SelectFrame”).attr(“src”

(二)在vue設定預設的路由以及設定定向

在vue中設定預設的路由,即一進入頁面就顯示其中一個路由的內容,也就是設定重定向。如下是設定預設路由的程式碼,即router資料夾下的index.js的內容:import Vue from 'vue'; import Router from 'vue-router'; imp

配置變更導致Activity啟——Fragment儲存以及啟Activity做法

一.在Fragment中儲存Activity的資料(在配置變更導致Activity重啟情況下)        在關閉Activity的時候,你希望能把頁面上的資料儲存下來,很多人第一反應一定是onSaveInstanceState()這個方法。對,一般情況

C# Winform自定義篩選及自帶統計行的Datagridview控制元件

網上分享有很多種自制DGV控制元件,都有不小的缺陷。 沒辦法,按需求自己定製了一個。 一、過濾方面類似於Excel的篩選功能。支援右鍵選單篩選,同時也支援在文字框輸入文字按焦點列進行篩選;  二、統計行我採用的是雙Datagridview方案。在構建控制元件時加入一個Dock為Bottom的子Datagr

sql語句查詢表復字段以及顯示字段

如果 重復 src 全部 展示 過去 ima 字段名 mage 今天跟大家分享兩條SQL語句,是關於查詢某表中重復字段以及顯示該字段的重復條數。 1.select * from 表名 where 列名 in (select 列名 from 表名 group by 列名 ha

解決winform的panel閃爍問題

利用winform開發時,可能都會遇到一個問題,就是在panel中不停的重繪圖形時,圖形會不停的閃爍。要解決這個辦法只需要開啟雙緩衝即可,由於初學c#,理解的不是很深,所以不多做解釋。以下程式碼親測可以解決這個問題:首先建立一個自己的panel類: using System

Asp.net 的div 滾動以及Css 的使用....

---當控制元件的高度超出範圍,自動出現上下,左右 拉動滾動條    <DIV style="OVERFLOW: auto; WIDTH: 600px; HEIGHT: 104px" align="left">     <table>        

指令管理vue滾動狀態以及滾動復原,讓你為所欲為。

       滾動狀態管理以及滾動條復原是困擾了我很久的問題,想必也有和我有同樣感受的同學,比如首頁跳詳情頁,以及各詳情頁滾動條的管理,讓人感覺很難受,那麼如何來簡化它呢?那麼就使用這款神奇的外掛vue-rescroll吧,讓你瘋狂飆車,為所欲為。 &

C#關於WinFormTabControl選項卡標題的問題

      這裡說的是每個TabPage的頭部,也就是標題,不是工作區域。       最開始用到TabControl的時候,我的每個選項卡是寫死的,而後由於專案需求又動態添加了TabControl並生成各個選項卡,而兩次我都要重繪 其標題,因此在這裡把我當時兩種情形下重

WinForm,每隔一段時間(參數)調一次函數(使用定時器)

pre tick break switch 時間 器) chan pri args 1      System.Windows.Forms.Timer setTimer; //定義一個定時器 2 int flg = 0;

.Net 4.X 提前上 .Net Core 的配置模式以及載配置

returns ets manage 自動生成 studio 127.0.0.1 文件中 讀取配置 應用程序 1. 前言 在提倡微服務及 Serverless 越來越普及的當下,傳統 .Net 應用的配置模式往往依賴於一個名為 web.config 的 XML 文件,在可擴

egret:設置滾動視圖、隱藏滾動以及層級的問題

直接 關閉按鈕 分享圖片 ont class clas size 界面 滾動條 一、設置滾動視圖 二、隱藏滾動條 三、層級問題 我將圖中list列表內容添加到界面後,我發現右上角的關閉按鈕失靈了, 第一反應是將這個按鈕的層級設置到最高層, 但是我直接設置後,發現還是有

spring cloud微服務之間的調以及eureka的自我保護機制

技術 頁面 dba mapping arch 之間 tga build ng- 上篇講了spring cloud註冊中心及客戶端的註冊,所以這篇主要講一下服務和服務之間是怎樣調用的 不會搭建的小夥伴請參考我上一篇博客:idea快速搭建spring cloud-註冊中心與註冊

父類的方法被覆蓋以及子類調父類覆蓋的方法

實現 python 函數 調用 self. exe over obj 同名 覆蓋 override   覆蓋是指在有繼承關系的類中,子類中實現了與基類同名的方法,在子類的實例調用該方法時,實際調用的是  子類中的覆蓋版本,這種現象叫做覆蓋 調用super 函數的兩個方

html頁面和迴流以及優化

在討論頁面重繪、迴流之前。需要對頁面的呈現流程有些瞭解,頁面是怎麼把html結合css等顯示到瀏覽器上的,下面的流程圖顯示了瀏覽器對頁面的呈現的處理流程。可能不同的瀏覽器略微會有些不同。但基本上都是類似的。 1.瀏覽器把獲取到的HTML程式碼解析成1個DOM樹,HTML中的每個tag都是D

根據id在同一張表查出兩資料,並將這兩資料“-”拼起來作為一資料返回

  area表 id areaname 25 雲南省 417 玉溪市   要求:在area表中根據id查出兩條資料,將這兩條資料用"-"拼起

Winform遮蔽UnityWebPlayer的右鍵以及自帶Logo解決方案整理

文章寫的非常好, 完美解決問題:https://www.cnblogs.com/fengshen/p/Unity3D.html 根據專案的需要,對已經完成的Unity三維模型以及遊戲要使用Winform進行包裝,也就是使用Winform做一層外殼。因此在展示Unity的時候使用到了UnityWeb

js表達式 >>> 0 淺析 (以及php簡單翻譯)

今天在看lodash的原始碼中slice這個函式實現的時候發現了裡面有這麼一行程式碼 length = start > end ? 0 : ((end - start) >>> 0) start >>>= 0 當時就很疑惑,知道 >&g

陣列去掉分割字串以及

//將陣列中的帶逗號的元素分割,如["A,B,C","A","A,B","C"]變為["A","B","C"] var roleA = new Array(); var roleB = new Array(); for(var i in roleInfo){ if(roleInfo[i].