СОБЫТИЕ Tooltip.popup Не стреляя с помощью Tooltip.show () в .NET FrameworkC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 СОБЫТИЕ Tooltip.popup Не стреляя с помощью Tooltip.show () в .NET Framework

Сообщение Anonymous »

У меня есть старое приложение Winforms с обычным Treeview , где мне нужно показать настраиваемые подсказки для отдельных узлов.

Код: Выделить всё

OwnerDraw=true
и isballoon = false ), и я показываю программную подсказку программно с помощью Tooltip.show () из события MouseMove TreeView . Заглушка (правильно) вычисляет и устанавливает размер всплывающего подъема событий, а обработчик Draw события (правильно) рисует подсказку. Шрифт с фиксированной шириной: Consolas, 12).
Я уже задал вопрос об этом, думая, что я делаю что-то не так, но теперь я обнаружил, что это работает нормально (для меня) с .net 8, но не с .net Framework . Я протестировал .NET Framework 4.8 (это то, что я должен использовать), 4.7.2 и 4.6.2 - всплывающее событие не запускается ни с одним из них. Событие поднимается всякий раз, когда отображается подсказка, либо с помощью явного призывания к одному из методов шоу, либо когда класс подсказки инструментов неявно отображает подсказку. Код, но в своем ответе на мой предыдущий вопрос @olivier jacot-descombes включил следующий код, который очень похож на то, как я это делаю, и это также код, который я использовал для своих тестов с тех пор: < /p>

Код: Выделить всё

public partial class FormTreeNodeToolTip : Form
{
private static readonly Font _font = new Font("Consolas", 16, FontStyle.Regular);
private TreeNode _currentNode;

public FormTreeNodeToolTip()
{
InitializeComponent();

treeView1.Nodes.Add(new TreeNode("First node"));
treeView1.Nodes.Add(new TreeNode("Second node with longer text"));
treeView1.Nodes.Add(new TreeNode("Third node"));
}

private void ToolTip1_Draw(object sender, DrawToolTipEventArgs e)
{
e.Graphics.Clear(Color.LightYellow);
e.Graphics.DrawString(e.ToolTipText, _font, Brushes.Blue, e.Bounds);
}

private void TreeView1_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
_currentNode = e.Node;
Point cursor = treeView1.PointToClient(Cursor.Position);
toolTip1.Show(e.Node.Text, treeView1, cursor.X + 20, cursor.Y + 20, 800);
}

private void ToolTip1_Popup(object sender, PopupEventArgs e)
{
e.ToolTipSize = TextRenderer.MeasureText(_currentNode.Text, _font);
}

private void TreeView1_MouseMove(object sender, MouseEventArgs e)
{
if (treeView1.GetNodeAt(e.Location) != _currentNode) {
_currentNode = null;
toolTip1.Hide(treeView1);
}
}

private void TreeView1_MouseLeave(object sender, EventArgs e)
{
toolTip1.Hide(treeView1);
}
}
Я должен добавить, что я попытался использовать различные события для отображения подсказки инструментов, настройки инструментов. Ничто из того, что я делаю, не имеет никакого значения - событие Popup все еще не стреляет. Что (если что -то) могу сделать, чтобы сделать эту работу?

Код: Выделить всё

private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.treeView1 = new System.Windows.Forms.TreeView();
this.SuspendLayout();
//
// toolTip1
//
this.toolTip1.OwnerDraw = true;
this.toolTip1.Draw += new System.Windows.Forms.DrawToolTipEventHandler(this.ToolTip1_Draw);
this.toolTip1.Popup += new System.Windows.Forms.PopupEventHandler(this.ToolTip1_Popup);
//
// treeView1
//
this.treeView1.Location = new System.Drawing.Point(0, 0);
this.treeView1.Name = "treeView1";
this.treeView1.Size = new System.Drawing.Size(306, 231);
this.treeView1.TabIndex = 0;
this.treeView1.NodeMouseHover += new System.Windows.Forms.TreeNodeMouseHoverEventHandler(this.TreeView1_NodeMouseHover);
this.treeView1.MouseLeave += new System.EventHandler(this.TreeView1_MouseLeave);
this.treeView1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.TreeView1_MouseMove);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(710, 304);
this.Controls.Add(this.treeView1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
Обновление 2 :
добавил несколько строк в конструктор в примере, чтобы добавить пару узлов в Treeview . Я не думал упомянуть, что этот простой пример просто показывает заголовок узла как подсказку, поэтому чем дольше строка подписи, тем более очевидным становится то, что подсказка имеет неправильный размер. Там многострочный текст подъема инструментов для узла определяется на основе других вещей, и его необходимо собирать в данный момент.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -framework
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • СОБЫТИЕ Tooltip.popup Не стреляя с помощью Tooltip.show () в .NET Framework
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • СОБЫТИЕ Tooltip.popup Не стреляя с помощью Tooltip.show () в .NET Framework
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • СОБЫТИЕ Tooltip.popup Не стреляя с помощью Tooltip.show () в .NET Framework
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Я сделал программу Show Show Show Show Show Show программы TKINTER, кнопка для удаления дубликатов не работает
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • .NET 9 MAUI POPUP POPUP CUSTER
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»