Hallo liebe Community,
Ich will dass, mein Control erkennt wenn man auf eine zuerst gemalte hitbox klickt (X) und dann das gerade geöffnete Tab schließt.
Mein Code:
Das Problem ist jetzt, er erkennt, dass ein linksklcik gemacht worden ist , ABER NUR (!) wenn man auf das TabControl klick und nicht auf das X.
Das Folgende bild veranschaulicht das ganze nochmal.
Die Kreise sollen MAUSKLICKS (Linksklicks) Darstellen.
Die logische erklärung ist, dass er einen normal klick (wenn kein Tab davor ist) nicht erkennen kann, da dieser NICHT auf dem TabControl stattfindet.
d.h theoretisch müsste ich nur das Form_MouseDown Event umschreiben. Doch ich denke das wäre unschön und würde auch nicht funktionieren (abgesehen davon weiß ich nicht wie ich das überschreiben kann :D)
Könntet ihr mir weiterhelfen?
Bitte um Hilfe,
Danke im Vorraus.
Ich will dass, mein Control erkennt wenn man auf eine zuerst gemalte hitbox klickt (X) und dann das gerade geöffnete Tab schließt.
Mein Code:
VB.NET-Quellcode
- Imports System.Collections.Generic
- Imports System.Text
- Imports System.Windows.Forms
- Imports System.Drawing
- Imports System.Diagnostics
- Imports System.Runtime.InteropServices
- Imports System.ComponentModel
- Namespace tabControlSample
- Public Class TabControlEx
- Inherits TabControl
- Public Sub New()
- DrawCloseButton()
- AddHandler Me.MouseDown, New MouseEventHandler(AddressOf TabControlEX.mousedown)
- End Sub
- Private Sub TC_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
- If e.Button = System.Windows.Forms.MouseButtons.Left Then
- MsgBox("Left click")
- If New Rectangle(e.Location, New Size(1, 1)).IntersectsWith(closeButtonHitbox) Then
- MsgBox("intersects")
- RaiseEvent CloseButtonClicked()
- End If
- End If
- End Sub
- Public Sub DrawCloseButton()
- Dim g As Graphics = Me.CreateGraphics()
- g.DrawImage(My.Resources._1344600839_close, New Point(Me.Size.Width - 20, 2))
- closeButtonHitbox = New Rectangle(New Point(Size.Width - 20, 2), New Size(16, 16))
- End Sub
- Private closeButtonHitbox As Rectangle
- Public Delegate Sub CloseButton()
- Public Event CloseButtonClicked As CloseButton
- Protected Overrides Sub OnResize(e As EventArgs)
- DrawCloseButton()
- MyBase.OnResize(e)
- End Sub
Das Problem ist jetzt, er erkennt, dass ein linksklcik gemacht worden ist , ABER NUR (!) wenn man auf das TabControl klick und nicht auf das X.
Das Folgende bild veranschaulicht das ganze nochmal.
Die Kreise sollen MAUSKLICKS (Linksklicks) Darstellen.
Die logische erklärung ist, dass er einen normal klick (wenn kein Tab davor ist) nicht erkennen kann, da dieser NICHT auf dem TabControl stattfindet.
d.h theoretisch müsste ich nur das Form_MouseDown Event umschreiben. Doch ich denke das wäre unschön und würde auch nicht funktionieren (abgesehen davon weiß ich nicht wie ich das überschreiben kann :D)
Könntet ihr mir weiterhelfen?
Bitte um Hilfe,
Danke im Vorraus.