POWERSHELL всплывающая подсказка на элементе списка указателя мыши - PullRequest
0 голосов
/ 23 мая 2018


Я использую графический интерфейс Powershell, я хочу использовать всплывающую подсказку в списке, но я не знаком с событиями и обработчиками событий, я не нахожу справку для события powershell / winform на Microsoft.com
Ниже моего списка находится $ listbox_groupe_import

#Infobulle au survol pour voir les tables d'un groupe de table
$obj_infobulle = New-Object System.Windows.Forms.ToolTip 
$obj_infobulle.InitialDelay = 100     
$obj_infobulle.ReshowDelay = 100 

#Sélectionne tous les groupes de tables dans la base de données et les met dans une liste déroulante 
$listbox_groupe_import = Get-ListboxGroup
#Création d'une info bulle pour la Listbox.
$obj_infobulle.SetToolTip($listBox_groupe_import, "tooltip sur listbox")

Я хочу установить всплывающую подсказку при наведении мыши
Я нашел это, но не знаю, как его выполнить:

$listboxGroupe_MouseMove = [System.Windows.Forms.MouseEventHandler]{
    #Event Argument: $_ = [System.Windows.Forms.MouseEventArgs]
    #TODO: Place custom script here

    #index vaut ce qu'on pointe avec la souris au dessus de listbox1
    $index = $listBox_groupe.IndexFromPoint($_.Location)     #$_ => this (listbox.location) je crois
    ##"index ="+$index
    ##$tooltip1.SetToolTip($listBox_groupe, "index ="+$index)

    if ($index -ne -1){ 
        #Tooltype sur listbox1 = valeur de l'item pointé
        $tooltip1.SetToolTip($listBox_groupe, $listBox_groupe.Items[$index].ToString()) 
    }
    else{ 
        #on n'est pas au dessus de listBox_groupe
        $tooltip1.SetToolTip($listBox_groupe, "") 
    }
}

Можете ли вы сказать мне, как выполнить этот код при наведении курсора мыши в моем списке?
Или другой способ отобразить всплывающую подсказку с различным текстом для каждого элемента моего списка?
Спасибо

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Можете ли вы сказать мне, как выполнить этот код с помощью указателя мыши в моем списке?

Чтобы найти местоположение мыши в событии при наведении, сначала вы можете использовать Control.MousePosition, чтобы найти указатель мыширасположение экрана, а затем, используя ListBox.PointToClient, преобразуйте его в положение мыши на элементе управления.Тогда вся остальная логика похожа на ту, что у вас уже есть:

$point = $listBox.PointToClient([System.Windows.Forms.Control]::MousePosition)
$index = $listBox.IndexFromPoint($point)
if($index -ge 0) {
    $toolTip.SetToolTip($listBox, $listBox.GetItemText($listBox.Items[$index]))
}
else {
    $toolTip.SetToolTip($listBox, "")
}

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

Также donне забудьте, что для обработки события MouseHover необходимо использовать Add_MouseHover.

0 голосов
/ 24 мая 2018

Решение:

#Au survol
$listBox_groupe.add_MouseEnter({

    #récupérer la position de la souris
    $point = $listBox_groupe.PointToClient([System.Windows.Forms.Control]::MousePosition)

    #récupérer l'indice de l'item sur lequel on pointe
    $index = $listBox_groupe.IndexFromPoint($point)

    if($index -ge 0) {
        #l'infobulle est au dessus de listBox_groupe et elle a pour texte le texte de l'item
        $tooltip1.SetToolTip($listBox_groupe, $listBox_groupe.GetItemText($listBox_groupe.Items[$index]))
    }
})
0 голосов
/ 23 мая 2018

Вот документация .В частности, посмотрите на события внизу.Есть событие MouseHover, которое вы хотите добавить:

$MyListBox.add_MouseHover({
    # display your tooltip here
})
$MyListBox.add_MouseLeave({
    # remove the tooltip now that user moved away
})

Графические интерфейсы PowerShell и обработчики событий не очень хорошо документированы, поскольку вы обычно хотите обрабатывать подобные вещи в C #.

...