Как показать всплывающую подсказку, щелкнув правой кнопкой мыши поле со списком? - PullRequest
0 голосов
/ 12 июля 2020

Я хочу, чтобы при прямом щелчке мыши происходило что-то вроде этого:

  private void ComboBox1_MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            string name = "גובה: " + (SelectedItem as student).Hight.ToString() + "   דרגת פטפוט:" + (SelectedItem as student).Level_garrulity.ToString();
            this.toolTip1.SetToolTip(this, name);
        }
    }

не работает, но если я изменю его на левый щелчок, все в порядке. в чем может быть проблема?

1 Ответ

0 голосов
/ 12 июля 2020

Щелчок правой кнопкой мыши по полю со списком предназначен для контекстного меню.

Если контекстное меню не связано с полем со списком, отображается стандартное windows системное меню.

Чтобы делать то, что вы хотите, как вы хотите, вам нужно отключить это с помощью фиктивного меню:

using System.ComponentModel;

public FormTest()
{
  InitializeComponent();
  ComboBox1.ContextMenuStrip = new ContextMenuStrip();
  ComboBox1.ContextMenuStrip.Opening += ComboBox1_RightMouseClick;
}

private void FormTest_Load(object sender, EventArgs e)
{
  ComboBox1.Items.Add(new student() { Name = "name 1", Hight = 10, Level_garrulity = 1 });
  ComboBox1.Items.Add(new student() { Name = "name 2", Hight = 20, Level_garrulity = 2 });
  ComboBox1.Items.Add(new student() { Name = "name 3", Hight = 30, Level_garrulity = 3 });
}

private void ComboBox1_RightMouseClick(object sender, CancelEventArgs e)
{
  var item = ComboBox1.SelectedItem as student;
  if (item == null ) return;
  string name = "גובה: " + item.Hight.ToString()
              + "   דרגת פטפוט:" + item.Level_garrulity.ToString();
  toolTip1.SetToolTip(ComboBox1, name);
}

Но есть некоторые проблемы, и я обнаружил, что результат - плохой UX.

Таким образом, вместо этого я рекомендую вам использовать событие наведения мыши, поэтому, если элемент выбран, отображается всплывающая подсказка, но для этого необходимо, чтобы поле со списком было выпадающим списком, чтобы отлично работать, иначе необходимо несколько движений мыши, но результат может быть лучше, чем при щелчке правой кнопкой мыши, если он соответствует вашей цели:

public FormTest()
{
  InitializeComponent();
  ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
}

private void ComboBox1_MouseHover(object sender, EventArgs e)
{
  var item = ComboBox1.SelectedItem as student;
  if ( item == null ) return;
  string name = "גובה: " + item.Hight.ToString()
              + "   דרגת פטפוט:" + item.Level_garrulity.ToString();
  toolTip1.SetToolTip(ComboBox1, name);
}

Следовательно, всплывающая подсказка всегда актуальна, в отличие от версии с щелчком правой кнопкой мыши.

введите описание изображения здесь

...