Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Eventhandling bei deaktivierten Controls

Frage Entwicklung VB for Applications

Mitglied: misterdemeanor

misterdemeanor (Level 1) - Jetzt verbinden

17.04.2006, aktualisiert 19.04.2006, 3806 Aufrufe, 1 Kommentar

Windows Forms
.Net 2
Visual Basic 2005

Grützi,

das Problem an sich : Deaktivierte Steuerelemente feuern keine Ereignisse.

Weiß jemand wie man mit einem "Workaround" trotzdem auf die Ereignisse reagieren kann?

Zur Zeit versuche ich da in Richtung des Parents und dem überschreiben dessen Ereignisse an eine Lösung zu kommen, da aber Frischling in VB8...

Im konkreten Fall bei mir geht es darum "eigene" ToolTips auch auf deaktivierten ToolStripItems anzeigen zu können. Sind Sie aktiviert gibt es da keine Probleme ---> MouseEnter-Event...

Eine harte Nuss *gg*

Grüße
Felix
Mitglied: misterdemeanor
19.04.2006 um 15:39 Uhr
So, ich habe es jetzt wie folgt gelöst:

1)Eine Klasse erstellt die von ToolStrip abgeleitet ist.
2)Im Konstruktor wird der zu erstellenden Instanz mittels SetStyle die Eigenschaft EnableNotifyMessage zugeteilt.
2)Die Methode OnNotifyMessage überschrieben.

Nun kann ich in der Sub OnNotifyMessage die Messages direkt von Windows auswerten. Beim WM_MOUSEOVER schaue ich ob /unter den Koordinaten/ (wird der Sub als Parameter übergeben) sich ein /ToolStripItem/ befindet (Mittels GetItemAt(x,y) ).

Somit kann ich auch auf deaktivierten /ToolStripItems/ einen ToolTip anzeigen. Das wiederum auch nur indirekt, da ToolTips /nur/ auf von Windows.Forms.Control - abgeleitete Klassen angezeigt werden (Show und SetToolTip erwarten entsprechendes Argument).

Also hole ich mir mittels den Eigenschaften aus der Bounds-Property des /ToolStripItems/ dessen /Location/ innerhalb seines Containers (dem /ToolStrip/) und rufe die entsprechende Show-Methode des ToolTips auf.

Problem gelöst.

Die Klasse cusToolStrip:
01.
Public Class cusToolStrip 
02.
  Inherits Windows.Forms.ToolStrip 
03.
 
04.
  Const WM_MOUSEOVER = 512 
05.
  Private m_totInstance As New ToolTip 
06.
  Private m_shownToolTip4ItemName As String 
07.
  Private m_ToolTipSettings As List(Of ToolTipSetting) 
08.
  Private SHOWCUSTOMTOOLTIPS As Boolean 
09.
 
10.
  Public Sub New() 
11.
    MyBase.New() 
12.
    Me.SetStyle(ControlStyles.EnableNotifyMessage, True) 
13.
    Me.m_totInstance.Active = False 
14.
    Me.ToolTipSettings = New List(Of ToolTipSetting) 
15.
  End Sub 
16.
 
17.
  Public Property ToolTipSettings() As List(Of ToolTipSetting) 
18.
    Get 
19.
      Return Me.m_ToolTipSettings 
20.
    End Get 
21.
    Set(ByVal value As List(Of ToolTipSetting)) 
22.
      Me.m_ToolTipSettings = value 
23.
    End Set 
24.
  End Property 
25.
 
26.
  Protected Overrides Sub OnNotifyMessage(ByVal m As System.Windows.Forms.Message) 
27.
    Dim tstItem As ToolStripItem 
28.
    Dim x As Integer 
29.
    Dim y As Integer 
30.
    Select Case m.Msg 
31.
      Case WM_MOUSEOVER 
32.
        x = GetHiWord(m.LParam.ToInt64) 
33.
        y = GetLoWord(m.LParam.ToInt64) 
34.
        tstItem = Me.GetItemAt(x, y) 
35.
        If IsNothing(tstItem) Then 
36.
          m_totInstance.Active = False 
37.
          m_shownToolTip4ItemName = String.Empty 
38.
          Exit Sub 
39.
        End If 
40.
        If tstItem.Name = m_shownToolTip4ItemName Then Exit Sub 
41.
        ShowToolTip4Item(tstItem) 
42.
    End Select 
43.
  End Sub 
44.
 
45.
  Private Sub ShowToolTip4Item(ByRef tstItem As ToolStripItem) 
46.
    Dim mes As String = ToolTipSettings.Item(tstItem.Tag).Message 
47.
      m_totInstance.Active = True 
48.
      m_totInstance.ToolTipTitle = ToolTipSettings.Item(tstItem.Tag).Title 
49.
      m_totInstance.ToolTipIcon = ToolTipSettings.Item(tstItem.Tag).Icon 
50.
      m_totInstance.IsBalloon = ToolTipSettings.Item(tstItem.Tag).IsBaloon 
51.
      Dim x = tstItem.Bounds.Left + CInt(tstItem.Width / 1.5) 
52.
      Dim y = CInt(tstItem.Height / 2) 
53.
      m_totInstance.Show(mes, tstItem.GetCurrentParent, x, y, ToolTipSettings(tstItem.Tag).Duration) 
54.
      m_shownToolTip4ItemName = tstItem.Name 
55.
  End Sub 
56.
 
57.
  Public Function GetLoWord(ByVal l As Long) As Integer 
58.
      Return ((l / &H10000) And &HFFFF&) 
59.
  End Function 
60.
 
61.
  Public Function GetHiWord(ByVal l As Long) As Integer 
62.
      Return (l And &HFFFF&) 
63.
  End Function 
64.
End Class
Falls sich wer wunderte was denn ToolTipSedtting ist :

01.
Public Class ToolTipSetting 
02.
  Inherits List(Of ToolTipSetting) 
03.
 
04.
  Private m_Title As String 
05.
  Private m_Message As String 
06.
  Private m_Icon As Windows.Forms.ToolTipIcon 
07.
  Private m_Duration As Integer 
08.
  Private m_IsBaloon As Boolean 
09.
 
10.
  Public Sub New(ByVal Title As String, ByVal Message As String, ByVal Icon As ToolTipIcon, ByVal Duration As Integer, ByVal IsBaloon As Boolean) 
11.
    m_Title = Title 
12.
    m_Message = Message 
13.
    m_Icon = Icon 
14.
    m_Duration = Duration 
15.
    m_IsBaloon = IsBaloon 
16.
  End Sub 
17.
 
18.
  Public Property Title() As String 
19.
    Get 
20.
      Return CStr(m_Title) 
21.
    End Get 
22.
    Set(ByVal value As String) 
23.
      m_Title = value 
24.
    End Set 
25.
  End Property 
26.
  Public Property Message() As String 
27.
    Get 
28.
      Return m_Message 
29.
    End Get 
30.
    Set(ByVal value As String) 
31.
      m_Message = value 
32.
    End Set 
33.
  End Property 
34.
  Public Property Icon() As ToolTipIcon 
35.
    Get 
36.
      Return m_Icon 
37.
    End Get 
38.
    Set(ByVal value As ToolTipIcon) 
39.
      m_Icon = value 
40.
    End Set 
41.
  End Property 
42.
  Public Property Duration() As Integer 
43.
    Get 
44.
      Return m_Duration 
45.
    End Get 
46.
    Set(ByVal value As Integer) 
47.
      m_Duration = value 
48.
    End Set 
49.
  End Property 
50.
  Public Property IsBaloon() As Boolean 
51.
    Get 
52.
      Return m_IsBaloon 
53.
    End Get 
54.
    Set(ByVal value As Boolean) 
55.
      m_IsBaloon = value 
56.
    End Set 
57.
  End Property 
58.
End Class
Zugegeben, das anzeigen der ToolTips hätte OOP-konform in den /Item/-Klassen stattfinden müssen, allerdings für alle /ToolStripItems/-Typen Klassen abzuleiten...? Für meine Problemstellung reicht das hier soweit aus.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Visual Studio
gelöst C-Sharp WPF Controls und Extensions (3)

Frage von mayho33 zum Thema Visual Studio ...

Windows Server
gelöst DHCP Problem bei Reservierung im deaktivierten Bereich (2)

Frage von menace zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...