PDA

View Full Version : تشخیص کنترلی که کرسر روی آن قرار دارد



gomnam
شنبه 20 مرداد 1386, 21:12 عصر
چطوره میشه کنترلی را که موس روی ان هست را تشخیص داد؟
مثلا یه textBox و یه button و چند تا lable روی فرم داریم
میخوام تشخیص بدم که کرسر در حال حاضر روی کدام کنترل قرار داره ؟

dot_net_lover2
شنبه 20 مرداد 1386, 22:49 عصر
با یک foreach چک کن ببین کدوم Active هست.

dot_net_lover2
شنبه 20 مرداد 1386, 22:58 عصر
اینم کدش


foreach (Control control in this.Controls)
{
if (control.Focused)
{
MessageBox.Show(control.Name);
}
}

Mohammadreza Heidari
شنبه 20 مرداد 1386, 23:39 عصر
چطوره میشه کنترلی را که موس روی ان هست را تشخیص داد؟


میتونی از Event های MouseEnter و MouseLeave استفاده کنی.



میخوام تشخیص بدم که کرسر در حال حاضر روی کدام کنترل قرار داره ؟


برای این کار هم میتونی از Event های GetFocus و LostFocus استفاده کنی.

جواب دوست خوبم dot_net_lover2 (http://barnamenevis.org/forum/member.php?u=5423) هم درست هست اما در شرایطی که بخواهیم فقط کنترل هایی که از نوع TextBox و یا نوع دیگه ای باشه تست کنیم باید از typeof استفاده بشه.

mehdi.mousavi
یک شنبه 21 مرداد 1386, 01:30 صبح
چطوره میشه کنترلی را که موس روی ان هست را تشخیص داد؟
مثلا یه textBox و یه button و چند تا lable روی فرم داریم
میخوام تشخیص بدم که کرسر در حال حاضر روی کدام کنترل قرار داره ؟


سلام.
توابع زیر رو به فرم خودتون اضافه کنید:



private void MonitorMouseMove(Control.ControlCollection controls)
{
foreach (Control ctrl in controls)
{
if (ctrl.HasChildren)
MonitorMouseMove(ctrl.Controls);

if (ctrl.TabStop)
ctrl.MouseHover += new EventHandler(ctrl_MouseHover);
}
}

private void ctrl_MouseHover(Object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine(sender.ToString ());
}

سپس اونو در OnLoad یا بعد از InitializeComponent در ctor به اینصورت فراخوانی کنید:


MonitorMouseMove(Controls);به این ترتیب هر وقت Mouse رو روی کنترلهای درون فرم ببرید، تابع ctrl_MouseHover فراخوانی میشه و از روی sender میتونید تشخیص بدین که کدوم Control در حال حاضر زیر کرسر قرار داره.

mohammad272005
یک شنبه 21 مرداد 1386, 22:39 عصر
مگه


this.ActiveControl

نمی ده؟

mehdi.mousavi
دوشنبه 22 مرداد 1386, 09:59 صبح
مگه


this.ActiveControl
نمی ده؟


سلام.
ایشون دنبال کنترلی که Focus روشه، نیستن. وقتی Mouse رو روی کنترلهای یه فرم می برید، تا وقتی click نکنید، ActiveControl تغییری نمیکنه (تازه به شرطی که TabStop اون هم true باشه). استفاده از ActiveControl وقتی صحیح هستش که ایشون کنترلی رو که Caret توشه (یا Focused هست) رو بخوان بدست بیارن.