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); } }
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(); }
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(); }