Member 12561559 Ответов: 1

Как я могу переопределить обязанности и достижения подсказка, чтобы вывести форму на событие нарисовать


Привет,

Я могу сделать это достаточно легко через сам проект, изменив ownerdraw на true, но у меня есть несколько модулей для проекта (отдельные приложения), поэтому я хотел бы иметь один класс DLL, который я могу импортировать и вызывать по мере необходимости.

Поэтому, если я изменю ownerdraw на true в свойстве tooltip и помещу следующие строки кода в событие ondraw, я могу делать все, что захочу, поскольку я по существу взял на себя всплывающее окно всплывающей подсказки.

dim NewFrm as new Form2
     NewFrm.Show



но то, что я хотел бы сделать, вместо размещения стандартного элемента управления всплывающей подсказкой во всех моих формах, в нескольких проектах, связанных вместе, - это создать элемент управления DLL или toolbox, который работает точно так же, как элемент управления всплывающей подсказкой, но делает то, что я хочу, когда событие начинается на ondraw.


Imports System.Windows.Forms

Public Class NewToolTip

    Inherits System.Windows.Forms.ToolTip

        Private WithEvents toolTip As System.Windows.Forms.ToolTip

        Private Sub toolTip_Draw(ByVal sender As System.Object,
            ByVal e As DrawToolTipEventArgs) Handles toolTip.Draw

            Dim NewForm As New MyToolTipForm
            NewForm.Show()

        End Sub


End Class


Я пробовал искать, например, через codeproject и stackoverflow, а также общий поиск google, но я не получаю того, что ищу - любые советы или указания были бы великолепны, спасибо

Что я уже пробовал:

поиск в google, codeproject, stackoverflow и везде, где у него были пользовательские всплывающие подсказки или как переопределить всплывающие подсказки

1 Ответов

Рейтинг:
0

Skippy II

Привет,

Вы можете использовать код внизу и прикрепить его к каждой форме, на которой вы хотите, чтобы существующие всплывающие подсказки были перехвачены. Просто убедитесь, что эти всплывающие подсказки являются частью контейнера компонентов этой формы.

Imports System.Windows.Forms

Public Class TooltipStopper
    Inherits NativeWindow
    Implements IDisposable

    Dim TTs As Generic.List(Of ToolTip)

    Public Sub New(Frm As Form)
        'By use of reflection the ToolTipStopper will search for the "components" container on the form.
        'This container should contain all the ToolTips created on the form.
        Dim t As Type = Frm.GetType
        Dim obj As Object = t.InvokeMember("components", Reflection.BindingFlags.GetField Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic, Nothing, Frm, Nothing)
        If Not obj Is Nothing Then
            Dim components As System.ComponentModel.Container = CType(obj, System.ComponentModel.Container)
            For i As Integer = 0 To components.Components.Count - 1
                If TypeOf components.Components(i) Is ToolTip Then
                    'If a ToolTip has been found, add it to a collection.
                    Dim TT As ToolTip = CType(components.Components(i), ToolTip)
                    If TTs Is Nothing Then
                        TTs = New Generic.List(Of ToolTip)
                    End If
                    TTs.Add(TT)
                    'Defer the Popup event of the ToolTip to a procedure
                    AddHandler TT.Popup, AddressOf TT_Popup
                End If
            Next
        End If
    End Sub

    Private Sub TT_Popup(sender As Object, e As PopupEventArgs)
        'Show a replacement for the ToolTip here and cancel the original ToolTip
        e.Cancel = True
    End Sub

    Public Sub Dispose() Implements IDisposable.Dispose
        'Don't forget to remove the handlers for all the ToolTips found on the form
        If Not TTs Is Nothing Then
            For i As Integer = 0 To TTs.Count - 1
                RemoveHandler TTs(i).Popup, AddressOf TT_Popup
            Next
        End If
    End Sub
End Class


В форме вы бы тогда написали что-то вроде этого:

Public Class Form1
    Dim ToolTipStop As TooltipStopper.TooltipStopper

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        'bind the ToolTipStopper to the form
        ToolTipStop = New TooltipStopper.TooltipStopper(Me)

        'set the tooltip(s) to the controls you want
        Me.ToolTip1.SetToolTip(Me.Button1, "test")
    End Sub

    Private Sub Form1_Disposed(sender As Object, e As EventArgs) Handles Me.Disposed
        'be sure to dispose the ToolTipStopper
        Me.ToolTipStop.Dispose()
    End Sub
End Class


Надеюсь, это поможет!