PDA

View Full Version : ساختن شیع از روی نام یک فرم که رشته است



MMStudent
دوشنبه 18 بهمن 1389, 11:31 صبح
با سلام

اگر که نام یک فرم رو به صورت رشته داشته باشیم چطور میشه ازش شیع ساخت تا به کتنرل هاش دسترسی داشت

محسن شامحمدی
جمعه 22 بهمن 1389, 10:29 صبح
تا جایی که من می دونم فقط می شه این کار رو برای فرم های باز برنامه انجام داد به صورت زیر
ما توی وی بی دات نت اینکار رو می کنیم(امیدوارم به دردتون بخوره):


For Each frm As Object In Application.OpenForms
If frm.name = "Form2" Then
frm.TextBox1.text = "salam"
End If
Next

البته باید فرم 2 هم باز باشه(گفته بودم) و همچنین خاصیت modifiers شی Textbox1 باید روی Public باشه.
یک پروژه هم واستون درست کردم ببینید.

ACorvinus
جمعه 22 بهمن 1389, 11:53 صبح
سلام.

اينم يه روش هستش منتهي يكوچولو پيشرفته تر از روشي كه دوستمون پيشنهاد دادن:


object x = Activator.CreateInstance(Type.GetType("WindowsFormsApplication1.Form2"));
((Form)x).Controls.Find("TextBox1",true)[0].Text = "Hi Baby";
((Form)x).Show();

Reza_Yarahmadi
جمعه 22 بهمن 1389, 17:11 عصر
تا جایی که من می دونم فقط می شه این کار رو برای فرم های باز برنامه انجام داد
به چندین روش میشه از روی نام کلاس ، شئ ساخت. به نمونه های زیر توجه کنید.

using System.Reflection;
روش اول:

Form CreateFormByName(String formName)
{
Assembly ass = Assembly.GetExecutingAssembly();
return ass.CreateInstance(formName) as Form;
}
روش دوم :

Form CreateFormByName2(String formName)
{
Type t = Type.GetType(formName);
ConstructorInfo[] cons = t.GetConstructors();
object obj = cons[0].Invoke(new object[] { });
return obj as Form;
}
برای استفاده هم بصورت زیر میشه عمل کرد

CreateFormByName("Temp.Form1").Show();
در اینجا Temp فضای نامی (namespace)است که کلاس Form1 توی اون قرار دارد.

gama118
پنج شنبه 12 اسفند 1389, 11:33 صبح
تو هر دو روش زير پيغام خطا ميده

Form CreateFormByName(String formName)
{
Assembly ass = Assembly.GetExecutingAssembly();
return ass.CreateInstance(formName) as Form;
}


Form CreateFormByName2(String formName)
{
Type t = Type.GetType(formName);
ConstructorInfo[] cons = t.GetConstructors();
object obj = cons[0].Invoke(new object[] { });
return obj as Form;
}

پيغام object refrence not set مي ده