Eigene ScrollBar für Eigenes ListControl..(Mein Kopf Raucht!)

  • VB.NET

Es gibt 49 Antworten in diesem Thema. Der letzte Beitrag () ist von Baa$.

    @Baa$ Zwischenbericht:
    Gib Deinen Events dieselben Parameter wie die .NET-Controls, da ist es wesentlich einfacher, von diesen auf Deine SchollBar umzusteigen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Ja ich bin gerade dabei mich damit auseinander zusetzen... Eigentlich ging es mir nur darum eine Scrollbar für mein IPTV-Lists Control zu schreiben...
    Allerdings habe ich etwas rumgesurft und bei Java irgendwas interessantes gelesen von wegen adding to Container Controls... Dazu habe ich aber noch nichts in c# Oder VB.net gesehen... Aber habe auch nur etwas rumgesurft denke am Wochenende wenn ich nicht Arbeiten muss setze ich mich mit der Materie genauer Ausseinander... Öhm ja muss ich Mal schauen wie die Events in den .net Controls sind glaube irgendwie bei irgendwas mit R(Name vergessen aber Google findet schon).. kann man c# Microsoft sources einschauen... Ich halt euch auf dem laufenden hier

    Ich habe bisher nur nur dir CoreScrollBar Source von CodeProjekt.com gesehen... Wo ich nichts durch kapiert habe,... Durch ein Dokument auf irgendeiner Seite über ScrollBars wo stand was Large/Small Value.. etc... diese ergeben müssen habe es mir zusammen gewurschtelt...

    Baa$ schrieb:

    adding to Container Controls
    Das passiert automatisch, wenn Du das Control im Designer auf Deine GUI ziehst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Haha du hast schon Hart Trockenen Humor
    Was ich meine... Was ich bei Java gesehen hatte und eben auch gesehen habe das zum Beispiel Bunifu bei ihren ScrollBars eine Scrollbar.bindto -> Container Controls Funktion haben... So lässt sich die ScrollBars mit einem Easy Befehl in jedes Container Controls einbinden... ^^
    Bei .NETZ ziehst Du das Control auf jedes Control, das Controls einbinden kann.
    Anders herum, aber iwie logisch besser.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Baa$ schrieb:

    4.Seht ihr irgendwas was noch fehlt ?

    Sehen tu ich nix - ist mir zuviel Code zum sehen.
    Aber wenn du ein Testprojekt anhängst, kann mans mal auffn Prüfstand tun.
    Ich bezweifel nämlich, dass das Teil brauchbar funktioniert - Scrollbar-Logik ist anspruchsvoller als sie aussieht.
    (Aber ich kann natürlich auch irren.)
    @ErfinderDesRadesnull Es ist ja noch nicht ganz fertig.. sobald ich zeit habe mache ich es zu ende.. Dann Poste ich Source, mit einer Test Projekt ;)
    ähm haha ihr seid ihr alle so mies Negativ Trocken ne... Herrlich :thumbsup:
    Lasset euch überraschen, Ü-Ei.. mäßig wird es werden! :D

    @RodFromGermany Ähm, glaube wir reden anneinander vorbei...
    schau mal was ich meine docs2.bunifuframework.com/docs/ui/controls/bunifu-scrollbars oder schau mal scrollbar to container controls bei google...
    das man das per drag and drop auf jedes beliebige control ziehen kann ist logisch und auch bei bunifu / Java & etc.. so allerdings muss man es dann noch einpflegen dies das jenes... so tut es dann von alleine... naja ist auch Leberkäse... Käse hat doch garkeine Leber!?? ?( :thumbsup: 8o

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Baa$“ ()

    ErfinderDesRades schrieb:

    (Aber ich kann natürlich auch irren.)


    Ist jedenfalls mehr zu beachten als man erwartet. Hatte beim testen meiner ScrollBar die originalen Scrollbars in einem DataGridView neben den Originalen. Mit meiner kam ich immer viel zu früh beim scrollen bei der letzen Row an, wobei erst wenn der Thumb ganz unten war das Maximum erreicht war, wie man es erwartet. Ich hatte richtig gestaunt, das die originale ScrollBar nie das Maximum erreicht, hatte Minimum, Maximum und Value von den originalen übernommen. Musste dann den Bereich den der Thumb einnimmt, vom ganzen abrechnen. Ob das auch so ist wenn die ScrollBars auf einem anderen scrollbaren Control sind, muss ich noch mal probieren.

    @Baa$ Wollte mich zwar zurückhalten mit gutgemeinten Tipps, aber für andere könnten das eines Tages auch nützlich sein.
    Wegen Scrollbar.bindto schau dir mal DataBinding an. In meiner modifizierten DataGridView nutze ich meine ScrollBar über den Originalen, alles geht über Binding, im Event ControlAdded des DataGridViews, wenn eine HScrollBar oder VScrollbar hinzugefügt wurde, adde ich meine ScrollBar, füge die Bindungen hinzu.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()

    @Takafusa
    Diggah danke für den Tip...
    Aber das was du zu Rod schreibst muss ich kurz was zu sagen!
    Hatte eben geschrieben das ich Testweise die V&Hscroll von Windows getestet habe... Und alter die Macht komplette Konfetti Schlacht aufeinmal aus meinem Verständnis für das Control musste echt hart überlegen ob Microsoft jetzt echt einen Bug hat oder ob ich evtl noch einmal in die Grundschule muss für Plus & Minus..
    Gottsei Dank ist seid 5.0 das Komplette .net meiner Meinung Hart verbuggt... Daher hab ich mich darauf besinnt das es an Microsoft 4.6 liegen muss... Einzigste was ich überlegt habe ob die Scalierung anders ist... Aber habe ich noch nicht weiter nachgeschaut trotzdem müssten die value 100 werden...
    Bilder
    • 16178068868716003385991409781536.jpg

      6,48 MB, 2.976×3.968, 101 mal angesehen
    • 1617806914681151159087878498633.jpg

      6,16 MB, 2.976×3.968, 37 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Baa$“ ()

    Evtl. rechnest du mit falschen Datentypen. Ich rechne mit float, teste mal das. Wenn nun in einem Schritt der Berechnung so etwas passiert, kann das eine Ursache sein.

    C#-Quellcode

    1. Debug.WriteLine((int)(3 * 1.1f));


    Ausgabe wie zu erwarten 3, weil in dem Fall abgerundet wird.
    Nene, das ist das ganz normale Windows HScroll... Habe nichts geändert nur Value in Label anzeigen lassen das war's.... Und ich mache alles mit Integer...

    Wollte es kurz zeigen... Um mehr ging es dabei nicht...

    Also irgendwie sind wir Grade wohl auch auf verschiedenen Bewusstseinsebenen hehe

    Weil sehe nicht was du meinst, selbst 100 abgerundet ist niemals 91... Und wenn Maximum = 100 ist und Minimum = 0 muss value von 0 bis 100 Ränge haben! Easy Peasy... So sollte es sein!
    Achso die originale, wie ich sagte kein Maximum erreicht. Da aber beim DataGridView die letzte Zeile sichbar wird, wenn der Thumb ganz unten ist, ist das mit hoher wahrscheinlichkeit kein Bug sondern geplant. Wenn ich mich richtig erinner, habe ich das so glöst, die länge des Thumbs rechne ich in einen Wert um der Maximal auf dieser länge des Tracks erreich werden kann, das ziehe ich vom maximum ab. Wobei ich das Maximum nicht änder, meine ereicht also auch nie das Maximum. Sagte ja bereits, meine verhält sich wie die originalen, nur das meine Horizontal, wie auch Vertikal einsetzbar ist.

    Aber mit Net 5 hast du recht, total verbuggt. Hatte eines Tages versehendlich anstatt ein WinForms Net Framework, ein WinForms Net Projekt erstellt, der Designer ist totaler Mist. Wunderte mich dann warum der MenuStrip nicht wie erwartet gefüllt werden kann. Bin jetzt ein wenig verschreckt, was .net angeht(nicht Framework, das geilt).

    Wenn du deine ScrollBar auch für original scrollbare WinForms Controls einsetzen willst, täte ich das anpassen, wenn die nur für dein eigenes ListControl ist kannstes auch so lassen.

    Baa$ schrieb:

    Also irgendwie sind wir Grade wohl auch auf verschiedenen Bewusstseinsebenen hehe


    Ich meine das so, ist in einem Schritt der Berechnung eine Rundung drin, fehlt am ende was oder ist zu viel. Daher rechne ich mit floats manchmal auch double oder decimal, aber meistens ist mir float präzise genug, erst am Ende konvertiere ich bei der Zuweisung der Zielvariable/Property zu int.

    C#-Quellcode

    1. int max = 102;
    2. int var1 = 5;
    3. int var2 = 7;
    4. int res = max / var1; // hier wird schon gerundet, in der nächsten Zeile wieder. Führt zu ungenauigkeiten.
    5. res /= var2;
    6. Debug.WriteLine(res);


    @Baa$ Wenn du den Code ausführst, wrid 2 ausgegeben, rechne das aber mal mit einem Rechner, kommt etwa 2.9 raus, rechnet man mit float und macht zum schluss ein int draus kommt 3 raus, anstatt 2. Das meine ich genau.

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „Takafusa“ ()

    Ja das habe ich schon, verstanden was du meintest...
    Ja entweder werde ich es mit Math.Round (hoffe war richtig, Habs Grade nicht im Kopf) oder Komplett ohne Runden Arbeiten... In meinem Kopf fliegen einige Gute Gute Ideen Rum... ich denke gegen 20:15 bin ich endlich Zuhause... Mal sehen ob ich noch Bock habe mich daran zusetzen später...

    Baa$ schrieb:

    Math.Round


    Du brauchst doch einen int am Ende oder nicht? Math.Round gibt aber keinen int raus. Bei der Konvertierung von float zu int, wird automatisch gerundet. Brauchst du das Ergebnis als Gleitkommazahl, dann macht Math.Round Sinn, denn solch eine kommt zurück. Für diese Berechnungen hier, nicht nötig.

    Wenn du mal Math.Round in den MS-Docs anschaust, siehst du, es gibt mehrere Überladungen. Manch nehmen double oder decimal als Argument(auch in kombination mit weiteren Argumenten)

    Nimmste eine Überladung mit Decimal, kommt ein Decimal zurück, bei denen mit Double kommt double zurück.

    docs.microsoft.com/de-de/dotne…m.math.round?view=net-5.0

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Takafusa“ ()

    So habe es jetzt zum Laufen gebracht, ich Poste die Source hier nur damit andere sehen wie es Funktioniert und eventuell es ihnen bei ihren Projekten weiterhilft..
    Die ScrollBar sollte so Laufen, es ist das Grund gerüst ich selber werde es für mich selber noch mit einigen Featers versehen...
    hier die Source..
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Imports System.Drawing.Drawing2D
    3. Public Class ScrollBars
    4. Inherits Control
    5. #Region "Events"
    6. Public Event Scroll()
    7. Public Event ValueChanged(Value As Integer)
    8. #End Region
    9. #Region "Declares"
    10. Private ThumCordinate As Integer = 0
    11. Private TRACKrectangle As Rectangle
    12. Private THUMBrectangle As Rectangle
    13. Private THUMBsize As Integer = Maximum - Minimum
    14. Private ThumbPath As New GraphicsPath
    15. Private TrackPath As New GraphicsPath
    16. Private ThumbClick As Boolean = False
    17. Private TrackClick As Boolean = False
    18. #End Region
    19. Sub New()
    20. SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    21. SetStyle(ControlStyles.UserPaint, True)
    22. SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    23. SetStyle(ControlStyles.ResizeRedraw, True)
    24. DoubleBuffered = True
    25. UpdateStyles()
    26. End Sub
    27. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    28. MyBase.OnPaint(e)
    29. ThumbPath.Reset()
    30. TrackPath.Reset()
    31. ThumbPath.AddRectangle(THUMBrectangle)
    32. TrackPath.AddRectangle(TRACKrectangle)
    33. THUMBsize = Maximum - Minimum
    34. With e.Graphics
    35. Select Case MState
    36. Case MouseState.Down
    37. If _Orientation = Orientation.Horizontal Then
    38. Size = New Size(Width, 12)
    39. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    40. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    41. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    42. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    43. ElseIf _Orientation = Orientation.Vertical Then
    44. Size = New Size(12, Height)
    45. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    46. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    47. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    48. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    49. End If
    50. Case MouseState.Over
    51. If _Orientation = Orientation.Horizontal Then
    52. Size = New Size(Width, 12)
    53. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    54. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    55. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    56. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    57. ElseIf _Orientation = Orientation.Vertical Then
    58. Size = New Size(12, Height)
    59. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    60. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    61. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    62. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    63. End If
    64. Case MouseState.None
    65. If _Orientation = Orientation.Horizontal Then
    66. Size = New Size(Width, 6)
    67. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    68. THUMBrectangle = New Rectangle(ThumCordinate, 2, THUMBsize, Height - 4) ' Begin<, ^Oben, Länge>, Tiefe⮟
    69. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    70. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    71. ElseIf _Orientation = Orientation.Vertical Then
    72. Size = New Size(6, Height)
    73. TRACKrectangle = New Rectangle(0, 0, Width, Height)
    74. THUMBrectangle = New Rectangle(2, ThumCordinate, Width - 4, THUMBsize) ' Begin>, Tiefe⮟, Breite<, Lönge⮟
    75. .FillRectangle(New SolidBrush(Color.FromArgb(61, 61, 61, 1)), TRACKrectangle)
    76. .FillRectangle(New SolidBrush(Color.FromArgb(10, 0, 0)), THUMBrectangle)
    77. End If
    78. End Select
    79. End With
    80. End Sub
    81. Protected Overrides Sub OnCreateControl()
    82. MyBase.OnCreateControl()
    83. If _Orientation = Orientation.Horizontal Then
    84. Dock = DockStyle.None
    85. Size = New Size(350, 6)
    86. Dock = DockStyle.Bottom
    87. ElseIf _Orientation = Orientation.Vertical Then
    88. Dock = DockStyle.None
    89. Size = New Size(6, 350)
    90. Dock = DockStyle.Right
    91. End If
    92. End Sub
    93. #Region "Propertys"
    94. Enum Orientation
    95. Horizontal = 0
    96. Vertical = 1
    97. End Enum
    98. Private _Orientation As Orientation = Orientation.Horizontal
    99. Public Property Orientatian As Orientation
    100. Get
    101. Return _Orientation
    102. End Get
    103. Set(value As Orientation)
    104. _Orientation = value
    105. If _Orientation = Orientation.Horizontal Then
    106. Dock = DockStyle.None
    107. Size = New Size(350, 6)
    108. Dock = DockStyle.Bottom
    109. ThumCordinate = 0
    110. _Value = 0
    111. ElseIf _Orientation = Orientation.Vertical Then
    112. Dock = DockStyle.None
    113. Size = New Size(6, 350)
    114. Dock = DockStyle.Right
    115. ThumCordinate = 0
    116. _Value = 0
    117. End If
    118. Invalidate()
    119. End Set
    120. End Property
    121. Private _Minimum As Integer = 0
    122. Public Property Minimum As Integer
    123. Get
    124. Return _Minimum
    125. End Get
    126. Set(value As Integer)
    127. _Minimum = value
    128. Invalidate()
    129. End Set
    130. End Property
    131. Private _Maximum As Integer = 100
    132. Public Property Maximum As Integer
    133. Get
    134. Return _Maximum
    135. End Get
    136. Set(value As Integer)
    137. _Maximum = value
    138. Invalidate()
    139. End Set
    140. End Property
    141. Private _Value As Integer
    142. Public Property Value As Integer
    143. Get
    144. Return _Value
    145. End Get
    146. Set(value As Integer)
    147. _Value = value
    148. If _Value >= Maximum Then
    149. _Value = Maximum
    150. ElseIf _Value <= Minimum Then
    151. _Value = Minimum
    152. End If
    153. RaiseEvent ValueChanged(value)
    154. Invalidate()
    155. End Set
    156. End Property
    157. Private _SmallChange As Integer = 1
    158. Public Property SmallChange As Integer
    159. Get
    160. Return _SmallChange
    161. End Get
    162. Set(value As Integer)
    163. _SmallChange = value
    164. Invalidate()
    165. End Set
    166. End Property
    167. Private _LargeChange As Integer = 10
    168. Public Property LargeChange As Integer
    169. Get
    170. Return _LargeChange
    171. End Get
    172. Set(value As Integer)
    173. _LargeChange = value
    174. Invalidate()
    175. End Set
    176. End Property
    177. #End Region
    178. #Region "Mouse Events"
    179. Private MState As MouseState = MouseState.None
    180. Private Enum MouseState
    181. Over
    182. Down
    183. None
    184. End Enum
    185. Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
    186. MyBase.OnMouseDown(e)
    187. If ThumbPath.IsVisible(e.Location) Then
    188. ThumbClick = True
    189. End If
    190. If TrackPath.IsVisible(e.Location) Then
    191. TrackClick = True
    192. MState = MouseState.Down : Invalidate() 'Größe ändert sich von 6 zu 12
    193. End If
    194. End Sub
    195. Protected Overrides Sub OnMouseClick(e As MouseEventArgs)
    196. MyBase.OnMouseClick(e)
    197. If TrackClick = Enabled Then
    198. If _Orientation = Orientation.Horizontal Then
    199. If e.X < ThumCordinate Then
    200. If e.X < Minimum OrElse e.X = Minimum Then
    201. ThumCordinate = 0
    202. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    203. RaiseEvent Scroll()
    204. Else
    205. ThumCordinate -= Change(TRACKrectangle.Width - THUMBsize, LargeChange)
    206. If Value > Maximum Then
    207. Value = Maximum
    208. Else
    209. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    210. RaiseEvent Scroll()
    211. End If
    212. End If
    213. Else
    214. If e.X < TRACKrectangle.Width OrElse e.X = Minimum Then
    215. If e.X > TRACKrectangle.Width - THUMBsize Then
    216. ThumCordinate = TRACKrectangle.Width - THUMBsize
    217. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    218. RaiseEvent Scroll()
    219. Else
    220. ThumCordinate += Change(TRACKrectangle.Width - THUMBsize, LargeChange)
    221. If Value < Minimum Then
    222. Value = Minimum
    223. RaiseEvent Scroll()
    224. Else
    225. Value = Percentage(ThumCordinate, TRACKrectangle.Width - THUMBsize)
    226. RaiseEvent Scroll()
    227. End If
    228. End If
    229. End If
    230. End If
    231. ElseIf _Orientation = Orientation.Vertical Then
    232. If e.Y < ThumCordinate Then
    233. If e.Y < Minimum OrElse e.Y = Minimum Then
    234. ThumCordinate = 0
    235. Value = Percentage(ThumCordinate, TRACKrectangle.Height - THUMBsize)
    236. RaiseEvent Scroll()
    237. Else
    238. ThumCordinate -= Change(TRACKrectangle.Height - THUMBsize, LargeChange)
    239. If Value > Maximum Then
    240. Value = Maximum
    241. Else
    242. Value = Percentage(ThumCordinate, TRACKrectangle.Height - THUMBsize)
    243. RaiseEvent Scroll()
    244. End If
    245. End If
    246. Else
    247. If e.Y < TRACKrectangle.Height OrElse e.Y = Minimum Then
    248. If e.Y > TRACKrectangle.Height - THUMBsize Then
    249. ThumCordinate = TRACKrectangle.Height - THUMBsize
    250. Value = Percentage(ThumCordinate, TRACKrectangle.Height - THUMBsize)
    251. RaiseEvent Scroll()
    252. Else
    253. ThumCordinate += Change(TRACKrectangle.Height - THUMBsize, LargeChange)
    254. If Value < Minimum Then
    255. Value = Minimum
    256. RaiseEvent Scroll()
    257. Else
    258. Value = Percentage(ThumCordinate, TRACKrectangle.Height - THUMBsize)
    259. RaiseEvent Scroll()
    260. End If
    261. End If
    262. End If
    263. End If
    264. End If
    265. End If
    266. End Sub
    267. Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    268. MyBase.OnMouseMove(e)
    269. If ThumbClick = True Then
    270. If _Orientation = Orientation.Horizontal Then
    271. If e.X < Minimum Then
    272. ElseIf e.X > TRACKrectangle.Width - THUMBsize Then
    273. Else
    274. ThumCordinate = e.X
    275. Value = Percentage(e.X, TRACKrectangle.Width - THUMBsize)
    276. RaiseEvent Scroll()
    277. End If
    278. Invalidate()
    279. ElseIf _Orientation = Orientation.Vertical Then
    280. If e.Y < Minimum Then
    281. ElseIf e.Y > TRACKrectangle.Height - THUMBsize Then
    282. Else
    283. ThumCordinate = e.Y
    284. Value = Percentage(e.Y, TRACKrectangle.Height - THUMBsize)
    285. RaiseEvent Scroll()
    286. End If
    287. Invalidate()
    288. End If
    289. End If
    290. If TrackPath.IsVisible(e.Location) Then
    291. MState = MouseState.Over : Invalidate()
    292. End If
    293. If ThumbPath.IsVisible(e.Location) Then
    294. MState = MouseState.Over : Invalidate()
    295. End If
    296. End Sub
    297. Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
    298. MyBase.OnMouseUp(e)
    299. TrackClick = False
    300. ThumbClick = False
    301. End Sub
    302. Protected Overrides Sub OnMouseLeave(e As EventArgs)
    303. MyBase.OnMouseLeave(e)
    304. MState = MouseState.None : Invalidate()
    305. End Sub
    306. #End Region
    307. #Region "Helps"
    308. Private Function Percentage(Value As Integer, Maximum As Integer) As Integer
    309. Return CInt(Math.Truncate(Value / Maximum * _Maximum))
    310. End Function
    311. Private Function Change(Chang As Integer, Cordinate As Integer) As Integer
    312. Return CInt(Math.Truncate(Chang * Cordinate / _Maximum))
    313. End Function
    314. #End Region
    315. End Class


    @Takafusa Hey haste dir das hier schonmal angeschaut? laptrinhx.com/let-the-user-sel…r-maximum-in-c-399479130/ Danke für deine Tips die haben echt geholfen! ;D
    So wollte hier nun Abschließen, und eine Anständig laufende & komplett vollständige Source Posten!
    Hier sind meine ScrollBaas! viel Spaß damit :P :D

    Vertical ScrollBaas!
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Imports System.ComponentModel
    3. Imports System.Drawing.Drawing2D
    4. Public Class VerticalScrollBaas
    5. Inherits Control
    6. #Region "Events"
    7. Public Event Scroll()
    8. Public Event ValueChanged(sender As VerticalScrollBaas, value As Integer)
    9. #End Region
    10. Sub New()
    11. SetStyle(ControlStyles.AllPaintingInWmPaint, True)
    12. SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    13. SetStyle(ControlStyles.ResizeRedraw, True)
    14. SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    15. SetStyle(ControlStyles.UserPaint, True)
    16. UpdateStyles()
    17. Size = New Size(6, 150)
    18. End Sub
    19. #Region "Deklaration"
    20. #Region "Rectangles"
    21. Private Track As Rectangle
    22. Private Thumb As Rectangle
    23. #End Region
    24. #Region "GraphicParts"
    25. Private ThumbGPath As New GraphicsPath
    26. Private TrackGPath As New GraphicsPath
    27. #End Region
    28. #Region "Integers"
    29. Private ThumbSize As Integer
    30. Private ThumbY As Integer
    31. Private OffSet As Integer
    32. #End Region
    33. #Region "Clicks"
    34. Private TrackClick As Boolean = False
    35. Private ThumbClick As Boolean = False
    36. #End Region
    37. #End Region
    38. #Region "Propertys"
    39. #Region "Main"
    40. Private _Minimum As Integer = 0
    41. <Category("ScrollBar")>
    42. Public Property Minimum As Integer
    43. Get
    44. Return _Minimum
    45. End Get
    46. Set(value As Integer)
    47. _Minimum = value
    48. Invalidate()
    49. End Set
    50. End Property
    51. Private _Maximum As Integer = 100
    52. <Category("ScrollBar")>
    53. Public Property Maximum As Integer
    54. Get
    55. Return _Maximum
    56. End Get
    57. Set(value As Integer)
    58. _Maximum = value
    59. Invalidate()
    60. End Set
    61. End Property
    62. Private _Value As Integer
    63. <Category("ScrollBar")>
    64. Public Property Value As Integer
    65. Get
    66. Return _Value
    67. End Get
    68. Set(value As Integer)
    69. _Value = value
    70. If _Value >= Maximum Then
    71. _Value = Maximum
    72. ElseIf _Value <= Minimum Then
    73. _Value = Minimum
    74. End If
    75. RaiseEvent ValueChanged(Me, value)
    76. Invalidate()
    77. End Set
    78. End Property
    79. Private _SmallChange As Integer = 1
    80. <Category("ScrollBar")>
    81. Public Property SmallChange As Integer
    82. Get
    83. Return _SmallChange
    84. End Get
    85. Set(value As Integer)
    86. _SmallChange = value
    87. Invalidate()
    88. End Set
    89. End Property
    90. Private _LargeChange As Integer = 10
    91. <Category("ScrollBar")>
    92. Public Property LargeChange As Integer
    93. Get
    94. Return _LargeChange
    95. End Get
    96. Set(value As Integer)
    97. _LargeChange = value
    98. Invalidate()
    99. End Set
    100. End Property
    101. #End Region
    102. #Region "Style"
    103. Private _TrackColor As Color = Color.FromArgb(204, 204, 204)
    104. <Category("Style")>
    105. Public Property TrackColor As Color
    106. Get
    107. Return _TrackColor
    108. End Get
    109. Set(value As Color)
    110. _TrackColor = value
    111. Invalidate()
    112. End Set
    113. End Property
    114. Private _ThumbColor As Color = Color.FromArgb(225, 188, 0)
    115. <Category("Style")>
    116. Public Property ThumbColor As Color
    117. Get
    118. Return _ThumbColor
    119. End Get
    120. Set(value As Color)
    121. _ThumbColor = value
    122. Invalidate()
    123. End Set
    124. End Property
    125. Private _ThumbHoverColor As Color = Color.Gold
    126. <Category("Style")>
    127. Public Property ThumbHoverColor As Color
    128. Get
    129. Return _ThumbHoverColor
    130. End Get
    131. Set(value As Color)
    132. _ThumbHoverColor = value
    133. Invalidate()
    134. End Set
    135. End Property
    136. #End Region
    137. #End Region
    138. #Region "Mouse"
    139. Private Enum MouseState
    140. Hover
    141. Click
    142. None
    143. End Enum
    144. Private _MouseState As MouseState = MouseState.None
    145. Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    146. MyBase.OnMouseMove(e)
    147. If ThumbClick = True Then
    148. If ThumbY < Minimum Then
    149. ThumbY = Minimum
    150. ElseIf ThumbY > Track.Height - ThumbSize Then
    151. ThumbY = Track.Height - ThumbSize
    152. Else
    153. ThumbY = ThumbY + (e.Y - OffSet)
    154. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    155. RaiseEvent Scroll()
    156. End If
    157. End If
    158. If TrackGPath.IsVisible(e.Location) OrElse ThumbGPath.IsVisible(e.Location) Then
    159. _MouseState = MouseState.Hover
    160. End If
    161. OffSet = e.Y
    162. Invalidate()
    163. End Sub
    164. Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
    165. MyBase.OnMouseDown(e)
    166. If e.Button = MouseButtons.Left Then
    167. If ThumbGPath.IsVisible(e.Location) Then
    168. OffSet = e.Y
    169. ThumbClick = True
    170. ElseIf TrackGPath.IsVisible(e.Location) Then
    171. TrackClick = True
    172. End If
    173. End If
    174. Invalidate()
    175. End Sub
    176. Protected Overrides Sub OnMouseClick(e As MouseEventArgs)
    177. MyBase.OnMouseClick(e)
    178. If TrackGPath.IsVisible(e.Location) Then
    179. If e.Y < ThumbY Then 'Über Thumb Click!
    180. ThumbY -= BackPercentage(Track.Height - ThumbSize, LargeChange)
    181. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    182. RaiseEvent Scroll()
    183. ElseIf e.Y > ThumbY + ThumbSize Then 'Unter Thumb Click!
    184. If ThumbY > Track.Height Then
    185. ThumbY = Track.Height - ThumbSize
    186. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    187. RaiseEvent Scroll()
    188. Else
    189. ThumbY += BackPercentage(Track.Height - ThumbSize, LargeChange)
    190. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    191. RaiseEvent Scroll()
    192. End If
    193. End If
    194. End If
    195. Invalidate()
    196. End Sub
    197. Protected Overrides Sub OnMouseWheel(e As MouseEventArgs)
    198. MyBase.OnMouseWheel(e)
    199. Select Case e.Delta
    200. Case Is <= -1 'Runterscrollen
    201. If ThumbY < Minimum Then
    202. ThumbY = Minimum
    203. Else
    204. ThumbY -= BackPercentage(Track.Height - ThumbSize, SmallChange)
    205. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    206. RaiseEvent Scroll()
    207. End If
    208. Case Is >= 1 'Hochscrollen
    209. If ThumbY > Track.Height - ThumbSize Then
    210. ThumbY = Track.Height - ThumbSize
    211. Else
    212. ThumbY += BackPercentage(Track.Height - ThumbSize, SmallChange)
    213. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    214. RaiseEvent Scroll()
    215. End If
    216. End Select
    217. Invalidate()
    218. End Sub
    219. Protected Overrides Sub OnMouseLeave(e As EventArgs)
    220. MyBase.OnMouseLeave(e)
    221. ThumbClick = False
    222. TrackClick = False
    223. _MouseState = MouseState.None
    224. Invalidate()
    225. End Sub
    226. Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
    227. MyBase.OnMouseUp(e)
    228. ThumbClick = False
    229. TrackClick = False
    230. _MouseState = MouseState.None
    231. Invalidate()
    232. End Sub
    233. #End Region
    234. #Region "Keyboard"
    235. Protected Overrides Sub OnKeyDown(e As KeyEventArgs)
    236. MyBase.OnKeyDown(e)
    237. Select Case e.KeyCode
    238. Case Keys.PageUp '- LargeChange
    239. If ThumbY <= Minimum Then
    240. ThumbY = Minimum
    241. Else
    242. ThumbY -= BackPercentage(Track.Height - ThumbSize, LargeChange)
    243. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    244. RaiseEvent Scroll()
    245. End If
    246. Case Keys.PageDown '+ LargeChange
    247. If ThumbY >= Track.Height - ThumbSize Then
    248. ThumbY = Track.Height - ThumbSize
    249. Else
    250. ThumbY += BackPercentage(Track.Height - ThumbSize, LargeChange)
    251. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    252. RaiseEvent Scroll()
    253. End If
    254. Case Keys.Up '- SmallChange
    255. If ThumbY <= Minimum Then
    256. ThumbY = Minimum
    257. Else
    258. ThumbY -= BackPercentage(Track.Height - ThumbSize, SmallChange)
    259. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    260. RaiseEvent Scroll()
    261. End If
    262. Case Keys.Down '+ SmallChange
    263. If ThumbY >= Track.Height - ThumbSize Then
    264. ThumbY = Track.Height - ThumbSize
    265. Else
    266. ThumbY += BackPercentage(Track.Height - ThumbSize, SmallChange)
    267. Value = Percentage(ThumbY, Track.Height - ThumbSize)
    268. RaiseEvent Scroll()
    269. End If
    270. End Select
    271. Invalidate()
    272. End Sub
    273. #End Region
    274. #Region "OnPaint"
    275. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    276. MyBase.OnPaint(e)
    277. ThumbSize = Maximum - Minimum
    278. #Region "GParts"
    279. TrackGPath.Reset()
    280. TrackGPath.AddRectangle(Track)
    281. ThumbGPath.Reset()
    282. ThumbGPath.AddRectangle(Thumb)
    283. #End Region
    284. With e.Graphics
    285. Select Case _MouseState
    286. Case MouseState.None
    287. Size = New Size(6, Height)
    288. Track = New Rectangle(0, 0, 6, Height)
    289. .FillRectangle(New SolidBrush(TrackColor), Track)
    290. Thumb = New Rectangle(0, ThumbY, Width, ThumbSize)
    291. .FillRectangle(New SolidBrush(ThumbColor), Thumb)
    292. Case MouseState.Hover
    293. Size = New Size(12, Height)
    294. Track = New Rectangle(0, 0, 12, Height)
    295. .FillRectangle(New SolidBrush(TrackColor), Track)
    296. Thumb = New Rectangle(0, ThumbY, Width, ThumbSize)
    297. .FillRectangle(New SolidBrush(ThumbHoverColor), Thumb)
    298. Case MouseState.Click
    299. Size = New Size(12, Height)
    300. Track = New Rectangle(0, 0, 12, Height)
    301. .FillRectangle(New SolidBrush(TrackColor), Track)
    302. Thumb = New Rectangle(0, ThumbY, Width, ThumbSize)
    303. .FillRectangle(New SolidBrush(ThumbHoverColor), Thumb)
    304. End Select
    305. End With
    306. End Sub
    307. #End Region
    308. #Region "ScrollBaas Functions"
    309. Private Function Percentage(Value As Integer, Maximum As Integer) As Integer
    310. Return CInt(Math.Truncate(Value / Maximum * _Maximum))
    311. End Function
    312. Private Function BackPercentage(Maximum As Integer, Change As Integer) As Integer
    313. Return CInt(Math.Truncate(Maximum * Change / _Maximum))
    314. End Function
    315. #End Region
    316. End Class


    HorizontalScrollBaas!
    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Imports System.ComponentModel
    3. Imports System.Drawing.Drawing2D
    4. Public Class HorizontalScrollBaas
    5. Inherits Control
    6. #Region "Events"
    7. Public Event Scroll()
    8. Public Event ValueChanged(sender As HorizontalScrollBaas, value As Integer)
    9. #End Region
    10. Sub New()
    11. SetStyle(ControlStyles.AllPaintingInWmPaint, True)
    12. SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    13. SetStyle(ControlStyles.ResizeRedraw, True)
    14. SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    15. SetStyle(ControlStyles.UserPaint, True)
    16. UpdateStyles()
    17. Size = New Size(150, 6)
    18. End Sub
    19. #Region "Deklaration"
    20. #Region "Rectangles"
    21. Private Track As Rectangle
    22. Private Thumb As Rectangle
    23. #End Region
    24. #Region "GraphicParts"
    25. Private ThumbGPath As New GraphicsPath
    26. Private TrackGPath As New GraphicsPath
    27. #End Region
    28. #Region "Integers"
    29. Private ThumbSize As Integer
    30. Private ThumbX As Integer
    31. Private OffSet As Integer
    32. #End Region
    33. #Region "Clicks"
    34. Private TrackClick As Boolean = False
    35. Private ThumbClick As Boolean = False
    36. #End Region
    37. #End Region
    38. #Region "Propertys"
    39. #Region "Main"
    40. Private _Minimum As Integer = 0
    41. <Category("ScrollBar")>
    42. Public Property Minimum As Integer
    43. Get
    44. Return _Minimum
    45. End Get
    46. Set(value As Integer)
    47. _Minimum = value
    48. Invalidate()
    49. End Set
    50. End Property
    51. Private _Maximum As Integer = 100
    52. <Category("ScrollBar")>
    53. Public Property Maximum As Integer
    54. Get
    55. Return _Maximum
    56. End Get
    57. Set(value As Integer)
    58. _Maximum = value
    59. Invalidate()
    60. End Set
    61. End Property
    62. Private _Value As Integer
    63. <Category("ScrollBar")>
    64. Public Property Value As Integer
    65. Get
    66. Return _Value
    67. End Get
    68. Set(value As Integer)
    69. _Value = value
    70. If _Value >= Maximum Then
    71. _Value = Maximum
    72. ElseIf _Value <= Minimum Then
    73. _Value = Minimum
    74. End If
    75. RaiseEvent ValueChanged(Me, value)
    76. Invalidate()
    77. End Set
    78. End Property
    79. Private _SmallChange As Integer = 1
    80. <Category("ScrollBar")>
    81. Public Property SmallChange As Integer
    82. Get
    83. Return _SmallChange
    84. End Get
    85. Set(value As Integer)
    86. _SmallChange = value
    87. Invalidate()
    88. End Set
    89. End Property
    90. Private _LargeChange As Integer = 10
    91. <Category("ScrollBar")>
    92. Public Property LargeChange As Integer
    93. Get
    94. Return _LargeChange
    95. End Get
    96. Set(value As Integer)
    97. _LargeChange = value
    98. Invalidate()
    99. End Set
    100. End Property
    101. #End Region
    102. #Region "Style"
    103. Private _TrackColor As Color = Color.FromArgb(204, 204, 204)
    104. <Category("Style")>
    105. Public Property TrackColor As Color
    106. Get
    107. Return _TrackColor
    108. End Get
    109. Set(value As Color)
    110. _TrackColor = value
    111. Invalidate()
    112. End Set
    113. End Property
    114. Private _ThumbColor As Color = Color.FromArgb(225, 188, 0)
    115. <Category("Style")>
    116. Public Property ThumbColor As Color
    117. Get
    118. Return _ThumbColor
    119. End Get
    120. Set(value As Color)
    121. _ThumbColor = value
    122. Invalidate()
    123. End Set
    124. End Property
    125. Private _ThumbHoverColor As Color = Color.Gold
    126. <Category("Style")>
    127. Public Property ThumbHoverColor As Color
    128. Get
    129. Return _ThumbHoverColor
    130. End Get
    131. Set(value As Color)
    132. _ThumbHoverColor = value
    133. Invalidate()
    134. End Set
    135. End Property
    136. #End Region
    137. #End Region
    138. #Region "Mouse"
    139. Private Enum MouseState
    140. Hover
    141. Click
    142. None
    143. End Enum
    144. Private _MouseState As MouseState = MouseState.None
    145. Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
    146. MyBase.OnMouseMove(e)
    147. If ThumbClick = True Then
    148. If ThumbX < Minimum Then
    149. ThumbX = Minimum
    150. ElseIf ThumbX > Track.Width - ThumbSize Then
    151. ThumbX = Track.Width - ThumbSize
    152. Else
    153. ThumbX = ThumbX + (e.X - OffSet)
    154. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    155. RaiseEvent Scroll()
    156. End If
    157. End If
    158. If TrackGPath.IsVisible(e.Location) OrElse ThumbGPath.IsVisible(e.Location) Then
    159. _MouseState = MouseState.Hover
    160. End If
    161. OffSet = e.X
    162. Invalidate()
    163. End Sub
    164. Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
    165. MyBase.OnMouseDown(e)
    166. If e.Button = MouseButtons.Left Then
    167. If ThumbGPath.IsVisible(e.Location) Then
    168. OffSet = e.X
    169. ThumbClick = True
    170. ElseIf TrackGPath.IsVisible(e.Location) Then
    171. TrackClick = True
    172. End If
    173. End If
    174. Invalidate()
    175. End Sub
    176. Protected Overrides Sub OnMouseClick(e As MouseEventArgs)
    177. MyBase.OnMouseClick(e)
    178. If TrackGPath.IsVisible(e.Location) Then
    179. If e.X < ThumbX Then 'Über Thumb Click!
    180. ThumbX -= BackPercentage(Track.Width - ThumbSize, LargeChange)
    181. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    182. RaiseEvent Scroll()
    183. ElseIf e.X > ThumbX + ThumbSize Then 'Unter Thumb Click!
    184. If ThumbX > Track.Width Then
    185. ThumbX = Track.Width - ThumbSize
    186. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    187. RaiseEvent Scroll()
    188. Else
    189. ThumbX += BackPercentage(Track.Width - ThumbSize, LargeChange)
    190. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    191. RaiseEvent Scroll()
    192. End If
    193. End If
    194. End If
    195. Invalidate()
    196. End Sub
    197. Protected Overrides Sub OnMouseWheel(e As MouseEventArgs)
    198. MyBase.OnMouseWheel(e)
    199. Select Case e.Delta
    200. Case Is <= -1 'Runterscrollen
    201. If ThumbX < Minimum Then
    202. ThumbX = Minimum
    203. Else
    204. ThumbX -= BackPercentage(Track.Width - ThumbSize, SmallChange)
    205. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    206. RaiseEvent Scroll()
    207. End If
    208. Case Is >= 1 'Hochscrollen
    209. If ThumbX > Track.Width - ThumbSize Then
    210. ThumbX = Track.Width - ThumbSize
    211. Else
    212. ThumbX += BackPercentage(Track.Width - ThumbSize, SmallChange)
    213. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    214. RaiseEvent Scroll()
    215. End If
    216. End Select
    217. Invalidate()
    218. End Sub
    219. Protected Overrides Sub OnMouseLeave(e As EventArgs)
    220. MyBase.OnMouseLeave(e)
    221. ThumbClick = False
    222. TrackClick = False
    223. _MouseState = MouseState.None
    224. Invalidate()
    225. End Sub
    226. Protected Overrides Sub OnMouseUp(e As MouseEventArgs)
    227. MyBase.OnMouseUp(e)
    228. ThumbClick = False
    229. TrackClick = False
    230. _MouseState = MouseState.None
    231. Invalidate()
    232. End Sub
    233. #End Region
    234. #Region "Keyboard"
    235. Protected Overrides Sub OnKeyDown(e As KeyEventArgs)
    236. MyBase.OnKeyDown(e)
    237. Select Case e.KeyCode
    238. Case Keys.PageUp '- LargeChange
    239. If ThumbX <= Minimum Then
    240. ThumbX = Minimum
    241. Else
    242. ThumbX -= BackPercentage(Track.Width - ThumbSize, LargeChange)
    243. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    244. RaiseEvent Scroll()
    245. End If
    246. Case Keys.PageDown '+ LargeChange
    247. If ThumbX >= Track.Width - ThumbSize Then
    248. ThumbX = Track.Width - ThumbSize
    249. Else
    250. ThumbX += BackPercentage(Track.Width - ThumbSize, LargeChange)
    251. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    252. RaiseEvent Scroll()
    253. End If
    254. Case Keys.Up '- SmallChange
    255. If ThumbX <= Minimum Then
    256. ThumbX = Minimum
    257. Else
    258. ThumbX -= BackPercentage(Track.Width - ThumbSize, SmallChange)
    259. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    260. RaiseEvent Scroll()
    261. End If
    262. Case Keys.Down '+ SmallChange
    263. If ThumbX >= Track.Width - ThumbSize Then
    264. ThumbX = Track.Width - ThumbSize
    265. Else
    266. ThumbX += BackPercentage(Track.Width - ThumbSize, SmallChange)
    267. Value = Percentage(ThumbX, Track.Width - ThumbSize)
    268. RaiseEvent Scroll()
    269. End If
    270. End Select
    271. Invalidate()
    272. End Sub
    273. #End Region
    274. #Region "OnPaint"
    275. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    276. MyBase.OnPaint(e)
    277. ThumbSize = Maximum - Minimum
    278. #Region "GParts"
    279. TrackGPath.Reset()
    280. TrackGPath.AddRectangle(Track)
    281. ThumbGPath.Reset()
    282. ThumbGPath.AddRectangle(Thumb)
    283. #End Region
    284. With e.Graphics
    285. Select Case _MouseState
    286. Case MouseState.None
    287. Size = New Size(Width, 6)
    288. Track = New Rectangle(0, 0, Width, 6)
    289. .FillRectangle(New SolidBrush(TrackColor), Track)
    290. Thumb = New Rectangle(ThumbX, 0, ThumbSize, Height)
    291. .FillRectangle(New SolidBrush(ThumbColor), Thumb)
    292. Case MouseState.Hover
    293. Size = New Size(Width, 12)
    294. Track = New Rectangle(0, 0, Width, 12)
    295. .FillRectangle(New SolidBrush(TrackColor), Track)
    296. Thumb = New Rectangle(ThumbX, 0, ThumbSize, Height)
    297. .FillRectangle(New SolidBrush(ThumbHoverColor), Thumb)
    298. Case MouseState.Click
    299. Size = New Size(Width, 12)
    300. Track = New Rectangle(0, 0, Width, 12)
    301. .FillRectangle(New SolidBrush(TrackColor), Track)
    302. Thumb = New Rectangle(ThumbX, 0, ThumbSize, Height)
    303. .FillRectangle(New SolidBrush(ThumbHoverColor), Thumb)
    304. End Select
    305. End With
    306. End Sub
    307. #End Region
    308. #Region "ScrollBaas Functions"
    309. Private Function Percentage(Value As Integer, Maximum As Integer) As Integer
    310. Return CInt(Math.Truncate(Value / Maximum * _Maximum))
    311. End Function
    312. Private Function BackPercentage(Maximum As Integer, Change As Integer) As Integer
    313. Return CInt(Math.Truncate(Maximum * Change / _Maximum))
    314. End Function
    315. #End Region
    316. End Class

    Baa$ schrieb:

    VB.NET-Quellcode

    1. Return CInt(Math.Truncate(Value / Maximum * _Maximum))
    Probier es mal mit Integer-Division:

    VB.NET-Quellcode

    1. Return (Value * _Maximum) \ Maximum
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Baa$ schrieb:

    So habe es jetzt zum Laufen gebracht, ich Poste die Source hier nur damit andere sehen wie es Funktioniert und eventuell es ihnen bei ihren Projekten weiterhilft..
    Die ScrollBar sollte so Laufen, es ist das Grund gerüst ich selber werde es für mich…

    Baa$ schrieb:

    So wollte hier nun Abschließen, und eine Anständig laufende &amp; komplett vollständige Source Posten!
    Hier sind meine ScrollBaas! viel Spaß damit <img src="https://www.vb-paradise.de/wcf/images/smilies/tongue.png" alt=":P" /> <img src="https://www.vb-paradise.de/wcf/images/smilies/biggrin.png" alt=":D" />

    Vertical ScrollBaas!
    (Versteckter Text)

    HorizontalScrollBaas!
    (Versteckter Text)


    @Baa$ etwas Kommentierung würde zum besseren Verständnis gut tun ;)