PDA

View Full Version : استفاده از TabControl



ozzy_mra
شنبه 23 بهمن 1389, 09:34 صبح
سلام
من یه tabControl دارم که شامل چند تا TabPage هست می خوام جوری باشه که کاربر با کلیک بر روی تب پیج ها نتونه صفحه رو عوض کنه ولی روی هر تب دو تا دکمه بزارم که به صفحه قبل و صفحه بعد بره ممکنه راهنماییم کنید؟

m_kalantar.cs
شنبه 23 بهمن 1389, 10:13 صبح
درود
اگه اشتباه نکنم شما یه چیزی شبیه wizard می خواید داشته باشید . درسته ؟

ozzy_mra
شنبه 23 بهمن 1389, 10:19 صبح
درود
اگه اشتباه نکنم شما یه چیزی شبیه wizard می خواید داشته باشید . درسته ؟

یه چیز شبیه این فقط با این تفاوت که با زدن دکمه Next می خوام به TabPage بعدی برم و دکمه Previous هم عکس همینه و اینکه یه فرمه دیگه!

shuriken
شنبه 23 بهمن 1389, 11:02 صبح
شما میتونی بقیه tabpage هارو غیر فعال کنی و وقتی که دکمه next زده شد این کد رو اجرا کنی


tabcontrol1.SelectedTab.Enable = false;
tabcontrol1.SelectTab(tabcontrol1.SelectedIndex + 1);
tabcontrol1.SelectedTab.Enable = true;

و وقتی که دکمه prev رو فشار میدین کد بر عکسشو بنویسین.
البته باید چک بکنین که شماره ایندکس وارد شده از تعداد tabpage ها بیشتر نشه که کار سختی نیست.
بازم اگه مشکلی بود درخدمتم

ozzy_mra
شنبه 23 بهمن 1389, 11:38 صبح
شما میتونی بقیه tabpage هارو غیر فعال کنی و وقتی که دکمه next زده شد این کد رو اجرا کنی


tabcontrol1.SelectedTab.Enable = false;
tabcontrol1.SelectTab(tabcontrol1.SelectedIndex + 1);
tabcontrol1.SelectedTab.Enable = true;

و وقتی که دکمه prev رو فشار میدین کد بر عکسشو بنویسین.
البته باید چک بکنین که شماره ایندکس وارد شده از تعداد tabpage ها بیشتر نشه که کار سختی نیست.
بازم اگه مشکلی بود درخدمتم

سلام
دوست عزیز tabPage خاصیت Enable نداره اینم عکسش

ozzy_mra
شنبه 23 بهمن 1389, 12:43 عصر
مشکل حرکت بین هر تب با

tabcontrol1.SelectTab(tabcontrol1.SelectedIndex + 1);

حل شد ولی می خوام کاربرم نتونه با کلیک کردن روی سربرگ ها اونا رو باز کنه یعنی در واقع می خوام ترتیب حرکت بین هر تب حفظ بشه چون یه فرم ورود اطلاعاته و تا اطلاعات تب 1 پرنشه کاربر نباید بره به تب 2
روی tabPage نمیشه کنترلی کرد چون خاصیت Locked یا enable نداره البته من یه جایی یه UserControl دیدم که این امکان رو گذاشته بود پس باید راه کدی ! هم داشته باشه

ali.ghodrati
شنبه 23 بهمن 1389, 14:14 عصر
سلام دوست عزیز
آنچه شما خواسته اید

66265

shuriken
یک شنبه 24 بهمن 1389, 08:22 صبح
ببخشید اشتباه از من بود
البته باید بگم این خاصیت وجود داره ولی در نسخه های فعلی قابل دسترسی نیست.
شما میتونین از تابع Hide از شی tabpage استفاده کنین تا کاربر اونارو نبینه
یا اگه این روش رو دوست ندارین از رخداد GotFocus از شی های tabpage آستفاده کنین
و در اون کنترل کنین که اگه نوبت این tabpage نبود نذارین روش فوکوس بشه
اگه بازم مشکلی بود بگین

ozzy_mra
یک شنبه 24 بهمن 1389, 09:28 صبح
سلام دوست عزیز
آنچه شما خواسته اید

66265

البته من می خوام فقط کاربر نتونه از روی سربرگ ها صفحه رو عوض کنه و فقط با دکمه ای که گذاشتم این کار رو انجام بدخ ولی فکر کنم به کمک یه متغییر Boolean بتونم این کار را انجام بدم یعنی پیشفرضش false باشه و اگه از دکمه استفاده کرد true بشه
مشکل اینه که برای TabPage برای کنترل فقط رویداد enter هست که تو این رویداد هم متغیی e خاصیت cancel نداره

ozzy_mra
یک شنبه 24 بهمن 1389, 09:49 صبح
خیلی ممنون از راهنماییتون
اینجوری حل شد :
ابتدا یه متغییر سراسری از نوع Boolean تعریف می کنیم و در زیر قسمت InitializeCompnents() مقدار اون رو برابر False قرار می دیم اسم این متغییر رو Ok می گذاریم
بعد این کد رو می نویسیم

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
if (tabControl1.SelectedIndex == 1 && !ok)
e.Cancel = true;
else if (tabControl1.SelectedIndex == 2 && !ok)
e.Cancel = true;
else if (tabControl1.SelectedIndex == 3 && !ok)
e.Cancel = true;
else if (tabControl1.SelectedIndex == 4 && !ok)
e.Cancel = true;
else
e.Cancel = false;
}

private void tabPage2_Enter(object sender, EventArgs e)
{
ok = false;
}
و در دکمه next این کد رو اضافه کردم :

private void button3_Click(object sender, EventArgs e)
{
try
{
ok = true;

tabControl1.SelectTab(tabControl1.SelectedIndex + 1);

}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}