Pergunta

Existe uma maneira direta de definir texto adicional para aparecer em uma dica de ferramenta quando o mouse de um usuário é mantido sobre um item em uma lista de marcha?

O que eu faria Espero Ser capaz de fazer no código é:

uiChkLstTables.DisplayOnHoverMember = "DisplayOnHoverProperty"; //Property contains extended details

Alguém pode me apontar na direção certa para fazer isso? Eu já encontrei alguns artigos que envolvem a detecção de qual item o mouse está no momento e criando uma nova instância da dica de ferramenta, mas isso parece um pouco inventado para ser a melhor maneira.

Desde já, obrigado.

Foi útil?

Solução

Adicione um objeto ToolTip ao seu formulário e adicione um manipulador de eventos para o CheckedListBox.mouseHover que chama um método ShowToolTip (); Adicione o evento MouseMove do seu CheckedListBox, que possui o seguinte código:

//Make ttIndex a global integer variable to store index of item currently showing tooltip.
//Check if current location is different from item having tooltip, if so call method
if (ttIndex != checkedListBox1.IndexFromPoint(e.Location))
                ShowToolTip();

Em seguida, crie o método ShowToolTip:

private void ShowToolTip()
    {
        ttIndex = checkedListBox1.IndexFromPoint(checkedListBox1.PointToClient(MousePosition));
        if (ttIndex > -1)
        {
            Point p = PointToClient(MousePosition);
            toolTip1.ToolTipTitle = "Tooltip Title";
            toolTip1.SetToolTip(checkedListBox1, checkedListBox1.Items[ttIndex].ToString());

        }
    }

Outras dicas

Como alternativa, você pode usar um ListView com caixas de seleção em vez disso. Este controle temconstruídas em suporte para dicas de ferramentas.

Inventado ou não; É isso que existe ...

Não estou ciente de uma maneira mais fácil do que você já descreveu (embora eu provavelmente reutilize uma instância da dica de ferramenta, em vez de criar novos o tempo todo). Se você tiver artigos que mostram isso, use -os - ou use um controle de terceiros que suporta isso nativamente (nenhum se lembra).

Eu gostaria de expandir a resposta de Fermin para talvez tornar sua solução maravilhosa um pouco mais clara.

No formulário em que você está trabalhando (provavelmente no arquivo .designer.cs), você precisa adicionar um manipulador de eventos MouseMove ao seu CheckedListbox (Fermin sugeriu originalmente um manipulador de eventos do MouseHover, mas isso não funcionou para mim).

this.checkedListBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.showCheckBoxToolTip);

Em seguida, adicione dois atributos de classe ao seu formulário, um objeto de dica de ferramenta e um número inteiro para acompanhar a última caixa de seleção cuja dica de ferramenta foi mostrada

private ToolTip toolTip1;
private int toolTipIndex;

Por fim, você precisa implementar o método ShowCheckBoxToolTip (). Esse método é muito semelhante à resposta de Fermin, exceto que eu combinei o método de retorno de chamada de evento com o método ShowToolTip (). Além disso, observe que um dos parâmetros do método é um mouseeventargs. Isso ocorre porque o atributo MouseMove requer um MouseeventHandler, que então fornece mouseeventargs.

private void showCheckBoxToolTip(object sender, MouseEventArgs e)
{
    if (toolTipIndex != this.checkedListBox.IndexFromPoint(e.Location))
    {
        toolTipIndex = checkedListBox.IndexFromPoint(checkedListBox.PointToClient(MousePosition));
        if (toolTipIndex > -1)
        {
            toolTip1.SetToolTip(checkedListBox, checkedListBox.Items[toolTipIndex].ToString());
        }
    }
}

Execute seus listões na sua lista de itens de caixa de seleção e defina o texto apropriado como o atributo 'título' do item, e ele será exibido no mouse ...

foreach (ListItem item in checkBoxList.Items)
                { 
                    //Find your item here...maybe a switch statement or
                    //a bunch of if()'s
                    if(item.Value.ToString() == "item 1")
                    {
                        item.Attributes["title"] = "This tooltip will display when I hover over item 1 now, thats it!!!";
                    }
                    if(item.Value.ToString() == "item 2")
                    {
                        item.Attributes["title"] = "This tooltip will display when I hover over item 2 now, thats it!!!";
                    }
                }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top