PDA

View Full Version : سوال: پیدا کردن فوکوس



AmiN0012
دوشنبه 03 اسفند 1394, 12:11 عصر
سلام دوستان.من ی فرم دارک که توش تکستباکس باتن و لیبل و ... هست.چطور میتونم بفهمم فوکوس رو کدوم یک از این کنترل هاست؟
میخام کنترلی که روش فوکوسه رو تو متغییری نگه دارم بعد محاسبات عملیاتم دوباره فوکوس به همون کنترل برگرده

ژیار رحیمی
دوشنبه 03 اسفند 1394, 15:28 عصر
label1.Text = this.ActiveControl.Name;

AmiN0012
سه شنبه 04 اسفند 1394, 02:48 صبح
ممنونم استاد عزیز.حالا من چطور به برنامم بگم بعد عملیات متن این لیبل که توش نام کنترلمه فوکوس کن.
کد زیر نوشتم اما عمل نمیکنه


string ActiveNameControl = "";
ActiveNameControl = this.ActiveControl.Name;
foreach (Control c in this.Controls)
{
if (c.Name == ActiveNameControl)
{
c.Focus();
}
}

ژیار رحیمی
سه شنبه 04 اسفند 1394, 09:40 صبح
وقتی focus روی یک textBox باشه و کد گرفتن Focus در رویداد کلیک یک Button نوشته شود عمل نمیکند دلیلش با کلیک روی Button ابتدا TextBox فوکوس خود را از دست میدهد و focus به Button انتقال داده میشود بعد رویداد کلیک دکمه اجرا میشود .یعنی هر بار با کلیک روی Button پراپرتی ActiveNameControl همیشه نام Button را برمیگرداند.به اینصورت میشه نام کنترل رو برگرداند.

public partial class Form1 : Form
{
private TextBox focusedTextbox = null;


public Form1()
{
InitializeComponent();
foreach (TextBox tb in this.Controls.OfType<TextBox>())
{
tb.Enter += textBox_Enter;
}
}


void textBox_Enter(object sender, EventArgs e)
{
focusedTextbox = (TextBox)sender;
}


private void button1_Click(object sender, EventArgs e)
{
if (focusedTextbox != null)
{
MessageBox.Show(focusedTextbox.Name);
}
}
}

AmiN0012
سه شنبه 04 اسفند 1394, 10:00 صبح
استاد عزیز من یه کامپوننت ساختم که یک لیبل و تکستباکس کنار هم هستند.برنامه کامپوننت منو به چشم پنل میبینه.من چطور بفهمونم منظورم تکستباس توی کامپوننته؟

AmiN0012
سه شنبه 04 اسفند 1394, 10:08 صبح
این مشکلو با فراخوانی اسم کامپوننت به همراه کلاسش حل کردم.
فقط تنها مشکلی که میمونه اینکه اگر تکست باکس ها توی group box باشند فوکوس نمیکنه

ژیار رحیمی
سه شنبه 04 اسفند 1394, 10:36 صبح
public Form1()
{
InitializeComponent();
foreach (TextBox tb in this.Controls.OfType<TextBox>())
{
tb.Enter += textBox_Enter;
}
foreach (GroupBox gb in this.Controls.OfType<GroupBox>())
foreach (TextBox tb in gb.Controls.OfType<TextBox>())
{
tb.Enter += textBox_Enter;
}
}