PDA

View Full Version : سوال: Flowlayoutpanel



qasemf
سه شنبه 19 مهر 1401, 00:35 صبح
سلام چطوری میشه بین ایتم های flowlayoutpanel حرکت کرد؟ منظورم اینه که با زدن کلید تب ایتم ها select بشن

qasemf
چهارشنبه 20 مهر 1401, 17:16 عصر
دوستان کسی نمیتونه در این رابطه نظری بده؟ چرا flp خاصیت key نداره؟
اصلا چطوری میشه این خاصیت رو براش تعریف کرد؟ همین خاصیتی که مثلا با زدن کلید تب ایتم ها یکی یکی select بشن!!

ROSTAM2
چهارشنبه 20 مهر 1401, 19:17 عصر
سلام
KeyPreview از فرم رو برابر True کن/

ROSTAM2
چهارشنبه 20 مهر 1401, 19:46 عصر
زبونش سخت بود ولی به زحمت تونستم بهش بفهمونم :لبخند:

154064



int i = 0;
private void FlowlayoutpanelItemSelection_KeyUp(object sender, KeyEventArgs e)
{

this.Text = e.KeyCode.ToString();
switch (e.KeyCode)
{
case Keys.Tab:

flowLayoutPanel1.Controls[i].Focus();
foreach (Control item in flowLayoutPanel1.Controls)
{
if (item.Focused == true)
{
item.BackColor = Color.Yellow;
}
else
{
item.BackColor = Color.Transparent;
}
}
if (i == flowLayoutPanel1.Controls.Count - 1)
{
i = 0;
}
else
{
i += 1;
}
break;
}



}

qasemf
پنج شنبه 21 مهر 1401, 21:57 عصر
خیلی عالی ممنون از پاسختون
فقط میشه از این طریق نام هر ایتم رو هم بدست اورد؟ یعنی همون زمانی که هر ایتم select شد نام اون ایتم که مثلا یک تصویر هست به صورت پیغام نمایش داده بشه!!!

ROSTAM2
جمعه 22 مهر 1401, 11:06 صبح
سلام ب همه.
قبل از هرچیز خصوصیت KeyPreview از فرم برابر true بشه.

1- دو تا متغیر در کلاس فرم می سازید که تو رویدادا قابل دسترسی باشه:

Control SelectedControl;
int index = 0;


2- یک تابع داریم که توسط شمارشگر index به ما شیء flowLayoutPanel رو به ما بر می گردونه:


/// <summary>
/// برگرداندن شیء انتخاب شده از یک FlowLayoutPanel توسط Index
/// </summary>
/// <param name="pControl">شیء والد که یک FlowLayoutPanel هستش</param>
/// <param name="index">شمارش گر برای انتخاب اشیاء شیء والدو</param>
/// <returns>شیء انتخاب شده را بر می گرداند.</returns>
Control GetControl(FlowLayoutPanel pControl, int index)
{
if (pControl.Controls.Count > index)
{
return pControl.Controls[index];
}
return null;
}


3- برای رویداد KeyUp از فرم این دستور رو می نویسیم که هربار به متغیر index یک اضافه می شه تا زمانی که عددش با تعداد اشیاء FlowLayoutPanel برابر بشه که مجددا index صفر بشه و شمارش از سر گرفته بشه و با زدن کلید Tab این روال ادامه داره و بهتر هست برای اینکار بجای فرم از UserControl استفاده کنید:


switch (e.KeyCode)
{
case Keys.Tab:

if (flowLayoutPanel1.Controls.Count == index)
{ index = 0; }
SelectedControl=GetControl(this.flowLayoutPanel1, index);
index += 1;
if (SelectedControl != null)
{
MessageBox.Show(SelectedControl.Name);
}

break;
}

qasemf
شنبه 23 مهر 1401, 22:22 عصر
نه مهندس این مشخصات خود کنترل رو برمیگردونه!! یک گالری تصاویر درست کردم و میخوام مثلا ۱۰۰ تا عکس رو داخل یه flp نمایش بدم از اون طرف یه یوزر کنترل دارم که داخلش یک picturebox داره که قرار هست این یوزر کنترل نقش ایتم ها رو به عهده داشته باشه , حالا من میخوام زمانی که روی هر ایتم رفتم و enter زدم اسم یا ادرس عکسی که داخل هر ایتم وجود داره رو بهم نشون بده

Mahmoud.Afrad
یک شنبه 24 مهر 1401, 03:02 صبح
یک پراپرتی به یوزرکنترل اضافه کنید برای نگهداری مسیر