PDA

View Full Version : یافتن کلاسی که اینستنس از آن مشتق شده



میلاد قاضی پور
شنبه 16 مرداد 1389, 23:52 عصر
سلام . میخوام بدونم چطور میشه فهمید متغیرمون که مثلا از نوع تول استریپ منو ایجاد شده از چه کلاسی مشتق شده .
میخوام در شرطی بررسی کنم که اگر آیتم منو استریپ separator نبود اعمال لازم رو انجام بده .

r00tkit
یک شنبه 17 مرداد 1389, 00:24 صبح
کمی بیش تر توضیح بده ،مثال روشن تر بزن

میلاد قاضی پور
یک شنبه 17 مرداد 1389, 01:35 صبح
ببین میخوام محتوای تری ویو رو با آیتمهای منو استریپ پر کنم . وقتی میرسه به سپریتور میگه که این ازونا نیست نمیتوی تطبیق بده .



foreach (ToolStripMenuItem subsubitem in subitem.DropDownItems)
{
int currentChildNode = Convert.ToInt32(treeView1.Nodes[currentNode].Nodes.Count - 1);
//بزودی در این محل شرطی نوشته میشود که بررسی کند که اگر
subsubitem
از نوع کلاس toolstrip separator

نبود دستور زیر را انجام بده

treeView1.Nodes[currentNode].Nodes[currentChildNode].Nodes.Add(subsubitem.Text);
}

میلاد قاضی پور
یک شنبه 17 مرداد 1389, 01:40 صبح
ببینید مثلا متغیر زیر رو تعریف کردیم .



ّForm1 f1=new Form1();






میخوایم در یک نقطه ی دیگه ببینیم f1 از کجا اومده ؟



typeof f1


تایپ آو مقدار system.windows.forms رو برنمیگردونه . میخوام روشی بگید که اونو برگردونه

اَرژنگ
یک شنبه 17 مرداد 1389, 03:42 صبح
ببینید مثلا متغیر زیر رو تعریف کردیم .



ّForm1 f1=new Form1();





میخوایم در یک نقطه ی دیگه ببینیم f1 از کجا اومده ؟



typeof f1



تایپ آو مقدار system.windows.forms رو برنمیگردونه . میخوام روشی بگید که اونو برگردونه






if f1 is Form1
{
(f1 as Form1).MethdodOfForm1();
}

hamid.shekasteh
یک شنبه 17 مرداد 1389, 08:03 صبح
روی نام کلاس کلیک راست کرده Go To Definition را کلیک کنید.

ricky22
یک شنبه 17 مرداد 1389, 08:31 صبح
روی نام کلاس کلیک راست کرده Go To Definition را کلیک کنید.
برادر من ایشون می خوان از طریق کد نویسی این کار رو انجام بدن.

میخوام در شرطی بررسی کنم که اگر آیتم منو استریپ separator نبود اعمال لازم رو انجام بده .

exlord
یک شنبه 17 مرداد 1389, 09:21 صبح
if( ! subsubitem is ToolStripSeparator)

میلاد قاضی پور
یک شنبه 17 مرداد 1389, 13:55 عصر
متأسفانه کار نمیکنه . بازم همون ارور رو میده .ارور روی شروع حلقه فوریچ آخر هست :

Unable to cast object of type 'System.Windows.Forms.ToolStripSeparator' to type 'System.Windows.Forms.ToolStripMenuItem'.





//افزودن آیتمهای منو به تریویو جهت جستجو
foreach (ToolStripMenuItem menu in ms.Items)
{
treeView1.Nodes.Add(menu.Text);
foreach (ToolStripMenuItem subitem in menu.DropDownItems)
{
int currentNode=Convert.ToInt32( treeView1.Nodes.Count-1);
treeView1.Nodes[currentNode].Nodes.Add(subitem.Text);
if (subitem is ToolStripMenuItem)
{
foreach (ToolStripMenuItem subsubitem in subitem.DropDownItems)
{
int currentChildNode = Convert.ToInt32(treeView1.Nodes[currentNode].Nodes.Count - 1);

if (subsubitem is ToolStripMenuItem)
treeView1.Nodes[currentNode].Nodes[currentChildNode].Nodes.Add(subsubitem.Text);

}
}
}
}

salehbagheri
یک شنبه 17 مرداد 1389, 14:18 عصر
در همون خطی که قرمزش کردید ToolStripMenuItem رو به ToolStripItem تغییر بدید.

یا اینکه کلاً ورودی تابع رو ToolStripItem در نظر بگیرید.

saeedalg
یک شنبه 17 مرداد 1389, 15:37 عصر
if(item as MyType != null)
do anything

علاوه بر این میتونید از myObject.GetType() == secondObject.GetType() استفاده کنید.

exlord
یک شنبه 17 مرداد 1389, 16:12 عصر
foreach (var menu in ms.Items)
{
if (menu is ToolStripMenuItem)
{
treeView1.Nodes.Add((ToolStripMenuItem)menu.Text);
}

}

میلاد قاضی پور
یک شنبه 17 مرداد 1389, 16:58 عصر
در همون خطی که قرمزش کردید ToolStripMenuItem رو به ToolStripItem تغییر بدید.

یا اینکه کلاً ورودی تابع رو ToolStripItem در نظر بگیرید.

در اون صورت شی ایجاد شده در فوریچ خاصیت dropdownitems رو نخواهد داشت و باید از نو روش دیگه ای اتخاذ بشه .



کد:
foreach (var menu in ms.Items)
{
if (menu is ToolStripMenuItem)
{
treeView1.Nodes.Add((ToolStripMenuItem)menu.Text);
}



ارور هنگام شروع هر مرحله از حلقه روی میده و به شرط مربوطه نمیرسه عزیز.

saeedalg
دوشنبه 18 مرداد 1389, 08:59 صبح
در اون صورت شی ایجاد شده در فوریچ خاصیت dropdownitems رو نخواهد داشت و باید از نو روش دیگه ای اتخاذ بشه .


ارور هنگام شروع هر مرحله از حلقه روی میده و به شرط مربوطه نمیرسه عزیز.

اگر همون طور که گفتن ToolStripItem در نظر بگیری داخل حلقه foreach میتونی شرط مربوط به چک کردن رو انجام بدی و همینطور کستش کنی به آیتم منو و ...

hamid.shekasteh
دوشنبه 18 مرداد 1389, 09:30 صبح
ببینید این همونه که میخواهید.
در مورد Go to Definition هم منظورم بکارگیری این امکان VS برای کد نویسی بهتر بود.
یا حق

میلاد قاضی پور
دوشنبه 18 مرداد 1389, 17:20 عصر
مثال عالی ای بود . اما در انجام منوهای درونی تر ضعف داره . مثلا چون اون آیتم از نوع آبجکت تعریف شده فاقد پراپرتی دراپدان آیتمز هست . بنابراین نمیشه داخل فوریچ اول فوریچ دیگه ای نوشت .

میلاد قاضی پور
دوشنبه 18 مرداد 1389, 17:23 عصر
من که سپریتور هارو پاک کردم اما اگه تو تاپیک خواستیم به نتیجه برسیم حاضرم راهنمایی های شمارو بررسی کنم ممنون از همه .

hamid.shekasteh
سه شنبه 19 مرداد 1389, 16:13 عصر
چرا seprator را حذف کردید، دوست عزیز در مورد object حق با شماست.
این بار کد رو کامل تر کردم، کد رو جدا هم براتون می گذارم :



foreach (ToolStripMenuItem menuItem in menuStrip1.Items)
{//file,edit,about
treeView1.Nodes.Add(menuItem.Text);
int currentNode = Convert.ToInt32(treeView1.Nodes.Count - 1);
if (menuItem is ToolStripMenuItem)
{
foreach (ToolStripItem dropDown in menuItem.DropDownItems)
{//import,...
if (!(dropDown is ToolStripSeparator) && (dropDown is ToolStripItem))
{
int currentChildNode = Convert.ToInt32(treeView1.Nodes[currentNode].Nodes.Count);
treeView1.Nodes[currentNode].Nodes.Add(dropDown.ToString());
if (dropDown is ToolStripMenuItem)
{
ToolStripItemCollection subCollction = ((ToolStripMenuItem)dropDown).DropDownItems;
foreach (ToolStripItem subDropDown in subCollction)
{//importType1,importType2,...
if (!(subDropDown is ToolStripSeparator) && (subDropDown is ToolStripItem))
{
int currentChildNode2 = treeView1.Nodes[currentNode].Nodes[currentChildNode].Nodes.Count;
treeView1.Nodes[currentNode].Nodes[currentChildNode].Nodes.Add(subDropDown.ToString());
}
}
}

}
}
}
}


امید وارم که براتون مفید باشه.