PDA

View Full Version : سوال: نمايش فرم با گرفتن نام فرم به عنوان پارامتر در c#



armm1388
سه شنبه 29 مرداد 1392, 09:50 صبح
با سلام
يک application حاوي چند فرم دارم . مي خواهم نام هر يک از فرم ها به عنوان پارامتر به سيستم داده شود و سپس آن فرم باز شود . خطوط زير مشکل دارند:
Form f ;
f = null;
f.Name = _my_Form;
f.ShowDialog();



چگونه مي توان آن را انجام داد؟

با تشکر فراوان

مهرداد صفا
سه شنبه 29 مرداد 1392, 11:34 صبح
با سلام.
برای نمایش (مجدد) یکی از فرمهای باز برنامه از Application.OpenForms استفاده می شود. این خصوصیت مجموعه ای از فرمهای باز برنامه است که با استفاده از نام آن می توانید به آن دسترسی داشته باشید (البته این نام باید به عنوان خصوصیت Name هر فرم ست شده باشد):

Application.OpenForms["Form1"].BackColor = Color.Black;
ولی اگر منظور شما از نام فرم نام کلاس یا type یک فرم است باید ابتدا با استفاده از متود Assembly.GetExecutingAssembly (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.REFLECTION.ASSEMBLY.GETEXECUTINGASSEM BLY%29;k%28VS.OBJECTBROWSER%29;k%28TargetFramework Moniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true) یک نمونه از کلاس System.Reflection.Assembly از اسمبلی جاری که برنامه در آن قرار دارد بگیرید و سپس با استفاده از متود GetType یا GetTypes نوع مورد نظر را به دست بیاورید. متود Assembly.GetType (http://msdn.microsoft.com/en-us/library/y0cd10tb%28v=vs.100%29.aspx) با استفاده از نام یک type، یک System.Type به شما می دهد که می توانید از آن برای نمونه سازی استفاده کنید. حالا می توانید با استفاده از کلاس Activator (http://msdn.microsoft.com/en-us/library/system.activator.aspx) یک نمونه از کلاس مربوط به فرم مورد نظر به دست بیاورید. متود Activator.CreateInstance(Type) (http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx) انتخاب بدی نیست. به این صورت:


string FormType = "Form2";
Form MyForm = null;
MyForm= (Form)System.Activator.CreateInstance(
System.Reflection.Assembly.GetExecutingAssembly()
.GetTypes().Where(t => t.Name == FormType).First());
MyForm.Show();