示例#1
0
 private void OnWordExplanation(string[] strs)
 {
     if (DicPanel.InvokeRequired)
     {
         OnWordExplanationDelegate d = OnWordExplanation;
         DicPanel.Invoke(d, new object[] { strs }); //the invoke method recognize what in object[] as params
     }
     else
     {
         if (strs.Length == 0)
         {
             explanation_dic.Text = NotFoundText;
         }
         else
         {
             StringBuilder sb = new StringBuilder();
             for (int i = 0; i < strs.Length; i++)
             {
                 sb.Append(string.Format("{0}. {1}\n\n", i + 1, strs[i]));
             }
             explanation_dic.Text = sb.ToString();
         }
         ExplanationBuffer.Add(TextPanel.Controls.GetChildIndex(WordLabelNow), explanation_dic.Text);
     }
 }
示例#2
0
        private void ShowDic(object sender, EventArgs e)
        {
            if (DicPanel.Visible && WordLabelNow == (Label)sender)
            {
                return;
            }

            WordLabelNow      = (Label)sender;
            DicPanel.Location = new Point(Math.Max(MousePosition.X - DicPanel.Width / 3 * 2, 0), WordLabelNow.RectangleToScreen(WordLabelNow.ClientRectangle).Bottom + 1);

            int i = TextPanel.Controls.GetChildIndex(WordLabelNow);

            if (!ExplanationBuffer.ContainsKey(i))
            {
                explanation_dic.Text = WaitingQueryText;
                Task <string[]> SearchDic = new Task <string[]>(() => HJJP.Search(WordLabelNow.Text));
                SearchDic.ContinueWith(t => { OnWordExplanation(t.Result); });
                SearchDic.Start();
            }
            else
            {
                explanation_dic.Text = ExplanationBuffer[i];
            }

            DicPanel.Refresh();
            DicPanel.Show();
        }
示例#3
0
        private void HideDic(object sender, EventArgs e)
        {
            if (WordLabelNow == null)
            {
                return;
            }

            Rectangle rl = WordLabelNow.RectangleToScreen(WordLabelNow.ClientRectangle);
            Rectangle rp = DicPanel.RectangleToScreen(DicPanel.ClientRectangle);
            Rectangle r  = new Rectangle(rl.Left, rl.Bottom, rp.Right - rl.Left, rp.Top - rl.Bottom);

            if (r.Contains(MousePosition) || rl.Contains(MousePosition) || rp.Contains(MousePosition))
            {
                return;
            }

            DicPanel.Hide();
        }