PDA

View Full Version : سوال: ایجاد TabItem و TreeviewItem به صورت Dynamic با ویژگی های دلخواه



bahar-danaei
یک شنبه 19 تیر 1390, 08:34 صبح
سلام.
من می خوام با کلیک بر روی دکمه " Add Tab " یک TabItem با نام و رنگ و عنوان دلخواه ایجاد کنم.توی Tab ایجاد شده با کلیک بر روی دکمه " Add TreeviewItem" یک TreeviewItem با نام و عنوان دلخواه به درخت داخل Tab اضافه شود.
یعنی در Tabهای مختلف ، درخت های مختلف ایجاد شوند.
اگه راهنمایی کنید ، کمک بزرگی کردید.
ممنونم

مهدی فرزاد
یک شنبه 19 تیر 1390, 22:06 عصر
سلام

شما هر کنترلی رو که میخواید به برنامه اضافه کنید باید ابتدا یک نمونه از اون رو بسازید و خصوصیات اونو تنظیم کنید و به مجموعه مورد نظر اضافه کنید مثلا اگر میخواید یک تب آیتم رو اضافه کنید میتونید به شکل زیر عمل کنید

TabItem tb = new TabItem();

tb.Header = "newtabitem";
tb.FontFamily = ......;
tb.FontSize = ......;
tb.Margin = .....;
tb.Background = ....;
.
.
.
this.tabControl.Items.Insert(0,tb);

و حالا اگر میخواید این تب آیتن یک استایل خواص داشته باشه ابتدا استایل مورد نظر رو بسازید و در یک ریسورس دیکشنری ذخیره کنید و برای اون یک Key تعریف کنید ( اگر key تعریف نکنید این استایل پیشفرض تما متب آیتم ها خواهد شد و دیگه به مراحل پایین نیازی نیست) سپس اون استایل رو با کد زیر به اون معرفی کنید)قبل از اضافه کردن به tabControl
مثلا نام استایل من هست tabItemStyle
tb.Style = FindResource("tabItemStyle") as Style;

پس کد شما به این شکل میشه
TabItem tb = new TabItem();
tb.Style = FindResource("tabItemStyle") as Style;
tb.Header = "newtabitem";
tb.FontFamily = ......;
tb.FontSize = ......;
tb.Margin = .....;
tb.Background = ....;
.
.
.
this.tabControl.Items.Insert(0,tb);

حتی شما میتونید برای اون Event هم معرفی کنید
به شکل زیر
TabItem tb = new TabItem();
tb.MouseDoubleClick +=new MouseButtonEventHandler(tb_MouseDoubleClick);
tb.Style = FindResource("tabItemStyle") as Style;
tb.Header = "newtabitem";
tb.FontFamily = ......;
tb.FontSize = ......;
tb.Margin = .....;
tb.Background = ....;
.
.
.
this.tabControl.Items.Insert(0,tb);

void tb_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{

}

نکته اینکه در کد
this.tabControl.Items.Insert(0,tb);
ما این آیتم رو به اولین آیتم در تب کنترل اضافه کردیم و با تغییر عدد میتونیم جای اون رو در بین سایر آیتم ها مشخص کنیم
اگر جای اون مهم نیست شما بجای کد بالا میتونید بنویسید
this.tabControl.Items.Add(tb);

و کنترل های درون اون رو هم میتنوید ابتدا در یک یوزر کنترل ایحاد کنید و بعد با کد
tb.Content = new UserControl();
اونو پر کنید

برای TreeView هم به این شکل میشه عمل کرد بعضی کنترل ها بستگی به خواصشون کمی تفاوت دارن اما با تمرین همه موارد برای شما روشن میشه

bahar-danaei
چهارشنبه 22 تیر 1390, 23:19 عصر
از راهنمایی تون ممنونم.
در ادامه ،سوال دیگری که دارم اینه که آیا می توان ویژگی های TabItemها(نام ،رنگ، محتوا و ...) را در DataBase ذخیره کرد تا در اجرای بعدی برنامه،TabItemهایی را که به صورت دینامیک در اجرای قبلی ایجاد کردیم را در اختیار داشته باشیم؟همین طور در رابطه با TreeViewها؟

مهدی فرزاد
پنج شنبه 23 تیر 1390, 09:38 صبح
سلام
این راه اصلا اصولی نیست
ارگ این ویزگی ها از قبل مشخص هست که اونها رو از قبل در ریسور دیکسنری توی برنامه ذخیره میکنید اما اگر د هنگام اجر ممکنه کاربر بر حسب سلیقه رنگی رو انتخاب کنه که شما میخواد اون رو برای اجرای بعد داشته باشید از راه زیر اقدام کنید

در Vs میتونید در Setting برنامه یک متغییر با هر نوعی که خواستید ایجاد کنید مثل شکل زیر
72419
و در برنامه به شکل زیر میتونید به اون دسترسی داشته باشید و توی اون مقدار بریزید و یا مقداری رو بخونید
Properties.Settings.Default.MyString

البته همین کار رو میتونید در فایل app.config بدید نتیجه یکی هست
72420http://barnamenevis.org/images/misc/pencil.png