La mia soluzione utilizza un trucco per ottenere ciò che desideri.
Quando si fa doppio clic all'interno di un'area di testo, si seleziona la parola sottostante.
Quindi utilizzando un RichTextBox
(TextBox
lampeggia sugli eventi del mouse) sul modulo è possibile simulare il doppio clic quando si fa clic sul pulsante centrale del mouse (qualcosa come il dizionario Babylon). Se lo desideri, puoi utilizzare MouseHover
invece di MouseDown
. Funziona.
public partial class Form3 : Form
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
public Form3()
{
InitializeComponent();
timer.Interval = 50;
timer.Tick += timer_Tick;
}
void timer_Tick(object sender, EventArgs e)
{
timer.Stop();
MessageBox.Show(richTextBox1.SelectedText);
// do more stuff here, e.g display your tooltip for the selected word or anything else
richTextBox1.SelectionLength = 0; // remove the highlighted color of selection
}
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
private const uint MOUSEEVENTF_LEFTDOWN = 0x02;
private const uint MOUSEEVENTF_LEFTUP = 0x04;
private const uint MOUSEEVENTF_RIGHTDOWN = 0x08;
private const uint MOUSEEVENTF_RIGHTUP = 0x10;
public void DoMouseDoubleClick()
{
//Call the imported function with the cursor's current position
uint X = (uint)Cursor.Position.X;
uint Y = (uint)Cursor.Position.Y;
mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
timer.Start(); // some delay is required so that mouse event reach to RichTextBox and the word get selected
}
private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Middle)
{
DoMouseDoubleClick();
}
}
}
fonte
2012-10-25 15:20:38
grazie, questo funziona brillantemente! Mi è piaciuta anche la regex usata per dare il calcio allo spazio bianco! :) – Jammerz858
Felice che ti sia piaciuto. Si noti che non rimuove semplicemente lo spazio bianco. Mantiene solo ciò che Regex considera una parola, quindi la punteggiatura e qualsiasi altra cosa che non viene considerata una parola viene rimossa. –