PDA

View Full Version : سوال: تبدیل رشته به فرم



forodo
چهارشنبه 03 مهر 1392, 14:19 عصر
سلام و خسته نباشید خدمت تمامی دوستان
من یک رشته ای رو از بانک اطلاعاتی می خونم که نام فرمم هستش.
حالا من می خوام از اون فرم یک شی بسازم.
چطوری می تونم اونو تبدیل به فرم کنم.
کانورتی هست؟

"رشته که باید فرم شود" AllApply = new "رشته که باید فرم شود"();
AllApply.ShowDialog();

farhad.k.t
چهارشنبه 03 مهر 1392, 14:32 عصر
از کد زیر استفاده کنید...

Form frm = new Form();
frm.Name = textBox1.Text;
frm.ShowDialog();

در ضمن بیشتر توضیح دهید...

مهرداد صفا
چهارشنبه 03 مهر 1392, 14:42 عصر
با سلام.
این تاپیک (http://barnamenevis.org/showthread.php?414936-%D9%86%D9%85%D8%A7%D9%8A%D8%B4-%D9%81%D8%B1%D9%85-%D8%A8%D8%A7-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-%D9%86%D8%A7%D9%85-%D9%81%D8%B1%D9%85-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D8%AF%D8%B1-c) رو ببینید.

forodo
چهارشنبه 03 مهر 1392, 16:44 عصر
try
{
OleDbConnection objconnection =
new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\radman.mdb;Persist" +
" Security Info=True;Jet OLEDB:Database Password=123456");
OleDbDataAdapter objDataAdapter = new OleDbDataAdapter();
DataSet objDataSet = new DataSet();

objDataAdapter.SelectCommand = new OleDbCommand();
objDataAdapter.SelectCommand.Connection = objconnection;

objDataAdapter.SelectCommand.CommandText =
@"SELECT FormName
FROM tblServisRequest
WHERE ID = " + 35;

objDataAdapter.SelectCommand.CommandType = CommandType.Text;

objconnection.Open();
objDataAdapter.Fill(objDataSet, "tblPersonal_tblExitEnter");
objconnection.Close();

string fr = objDataSet.Tables["tblPersonal_tblExitEnter"].Rows[0]["FormName"].ToString();

//fr = frmHazineBedonFactor;

}
catch (Exception)
{

}


این فراخوانی نام یک فرم را به من می دهد.
حالا من می خوام به این برسم.

frmHazineBedonFactor f = new frmHazineBedonFactor(clsFormsOpenOption.frmHazineB edoneFactor.See);
f.ShowDialog();


اگه باز درست توضیح ندادم بفرمایید تا بیشتر بگم.

forodo
چهارشنبه 03 مهر 1392, 16:54 عصر
از کد زیر استفاده کنید...

Form frm = new Form();
frm.Name = textBox1.Text;
frm.ShowDialog();

در ضمن بیشتر توضیح دهید...

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

forodo
چهارشنبه 03 مهر 1392, 16:57 عصر
با سلام.
این تاپیک (http://barnamenevis.org/showthread.php?414936-%D9%86%D9%85%D8%A7%D9%8A%D8%B4-%D9%81%D8%B1%D9%85-%D8%A8%D8%A7-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-%D9%86%D8%A7%D9%85-%D9%81%D8%B1%D9%85-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D8%AF%D8%B1-c) رو ببینید.

وقتی اینطوری می نویسم:

string fr = objDataSet.Tables["tblPersonal_tblExitEnter"].Rows[0]["FormName"].ToString();

string FormType = fr;
Form MyForm = null;
MyForm = (Form)System.Activator.CreateInstance(System.Refle ction.Assembly.GetExecutingAssembly().GetTypes().W here(t => t.Name == FormType).First());
MyForm.ShowDialog();


یک اررو می گیره که برای این هست که باید موقعی که فرمم می خواد باز بشه باید یک ورودی داشته باشد.
منظوریم اینطوری هستش:

frmHazineBedonFactor f = new frmHazineBedonFactor(clsFormsOpenOption.frmHazineB edoneFactor.See);
f.ShowDialog();




داخل پرانتز رو کجا باید بنویسم؟

tooraj_azizi_1035
چهارشنبه 03 مهر 1392, 19:14 عصر
سلام
یه راه اینه که از یک switch استفاده کنی و با مقادیر مقایسه کنی و به تناسب مقدار شیء رو بسازی مثلاً:
swtich(FormName)
case "frmHazineBedonFactor":
frmHazineBedonFactor f = new frmHazineBedonFactor(clsFormsOpenOption.frmHazineB edoneFactor.See);
f.ShowDialog();

forodo
چهارشنبه 03 مهر 1392, 20:26 عصر
سلام
یه راه اینه که از یک switch استفاده کنی و با مقادیر مقایسه کنی و به تناسب مقدار شیء رو بسازی مثلاً:
swtich(FormName)
case "frmHazineBedonFactor":
frmHazineBedonFactor f = new frmHazineBedonFactor(clsFormsOpenOption.frmHazineB edoneFactor.See);
f.ShowDialog();



25 تا فرم هستش.
می خوام همون رشته ای رو که از بانک اطلاعاتی می خونه برام فرمش رو باز کنه.
در پست شماره 6 جواب گرفتم و فرمی که می خواستم باز شد ولی نمی دونم کجای اون خطوط باید ورودی فرمم رو بدم!

forodo
چهارشنبه 03 مهر 1392, 21:00 عصر
اگر واقعاً راهی نیست که مطمئن هستم راهی وجود داره و تو برنامه نویسی همیشه چندین و چندین و چندین راه برای یک قضیه وجود دارد از همان سوییچ بروم!!!

Kubuntu
چهارشنبه 03 مهر 1392, 21:17 عصر
با استفاده از Reflection باید انجام بشه ک جواب شما توسط پست نمایش فرم از طریق رفلکشن (http://barnamenevis.org/showthread.php?414936-%D9%86%D9%85%D8%A7%D9%8A%D8%B4-%D9%81%D8%B1%D9%85-%D8%A8%D8%A7-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-%D9%86%D8%A7%D9%85-%D9%81%D8%B1%D9%85-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D8%AF%D8%B1-c&p=1853807&viewfull=1#post1853807) داده شده.
من قطعه کدی که نیاز داری رو می ذارم:
string FormType = "Form2";
Form MyForm = null;
MyForm= (Form)System.Activator.CreateInstance(
System.Reflection.Assembly.GetExecutingAssembly()
.GetTypes().Where(t => t.Name == FormType).First());
MyForm.Show();

forodo
چهارشنبه 03 مهر 1392, 21:40 عصر
با استفاده از Reflection باید انجام بشه ک جواب شما توسط پست نمایش فرم از طریق رفلکشن (http://barnamenevis.org/showthread.php?414936-%D9%86%D9%85%D8%A7%D9%8A%D8%B4-%D9%81%D8%B1%D9%85-%D8%A8%D8%A7-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-%D9%86%D8%A7%D9%85-%D9%81%D8%B1%D9%85-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D8%AF%D8%B1-c&p=1853807&viewfull=1#post1853807) داده شده.
من قطعه کدی که نیاز داری رو می ذارم:
string FormType = "Form2";
Form MyForm = null;
MyForm= (Form)System.Activator.CreateInstance(
System.Reflection.Assembly.GetExecutingAssembly()
.GetTypes().Where(t => t.Name == FormType).First());
MyForm.Show();

این لینک رو آقای مهرداد صفا (http://barnamenevis.org/member.php?261217-%D9%85%D9%87%D8%B1%D8%AF%D8%A7%D8%AF-%D8%B5%D9%81%D8%A7) در پست شماره 3 دادن.
جواب گرفتم ولی مشکل من اینه که فرمم دارای پارامتر ورودی هستش و باید ورودی بهش بدم.

frmHazineBedonFactor f = new frmHazineBedonFactor(clsFormsOpenOption.frmHazineB edoneFactor.See);
f.ShowDialog();



فرم باز نمی شه و ارور می ده به دلیل اینکه باید ورودی clsFormsOpenOption.frmHazineB edoneFactor.See رو بهش بدم.

نمی دونم که clsFormsOpenOption.frmHazineB edoneFactor.See رو کجای خطوط زیر بنویسم:

string fr = objDataSet.Tables["tblPersonal_tblExitEnter"].Rows[0]["FormName"].ToString();

string FormType = fr;
Form MyForm = null;
MyForm = (Form)System.Activator.CreateInstance(System.Refle ction.Assembly.GetExecutingAssembly().GetTypes().W here(t => t.Name == FormType).First());
MyForm.ShowDialog();

Kubuntu
چهارشنبه 03 مهر 1392, 21:53 عصر
بله می دونم مهرداد عزیز دادن...
من با reflection کار نکردم و ولی چون قبلا دنبال این سوال شما رفتم مطمئنم تنها راهش از طریق رفلکشنه. پیشنهاد می کنم دنبال این باشی ک حالا به این دستور چجوری می شه آرگومان اضافه کرد

forodo
چهارشنبه 03 مهر 1392, 22:14 عصر
بله می دونم مهرداد عزیز دادن...
من با reflection کار نکردم و ولی چون قبلا دنبال این سوال شما رفتم مطمئنم تنها راهش از طریق رفلکشنه. پیشنهاد می کنم دنبال این باشی ک حالا به این دستور چجوری می شه آرگومان اضافه کرد

رفلکشن نمی دونم چیه؟؟؟
از این کد هم سردر نمیارم فقط می دونم که کدهای LINQ هستن.
مشکل من هم دقیقاً همون آرگومان هستش.

Kubuntu
چهارشنبه 03 مهر 1392, 22:39 عصر
تا اونجا ک من می دونم رفلکشن مربوط به اسمبلی هستش. چرا از مهرداد نمی خوای کمکت کنه؟! ی پیغام خصوصی بده ;)

مهرداد صفا
چهارشنبه 03 مهر 1392, 23:08 عصر
با سلام.
بعد از ارسال Type به متود Activator.CreateInstance، پارامتر های Constructor یا متود سازنده را به ترتیب به متود ارسال کنید:

string FormType = "Form2";

Form MyForm = null;
System.Type TForm=System.Reflection.Assembly.GetExecutingAssem bly()
.GetTypes().Where(t => t.Name == FormType).First();
MyForm = (Form)System.Activator.CreateInstance(TForm,"hello world");



MyForm.Show();

forodo
چهارشنبه 03 مهر 1392, 23:27 عصر
اینطوری نوشتم:

string fr = objDataSet.Tables["tblPersonal_tblExitEnter"].Rows[0]["FormName"].ToString();

string FormType = fr;
Form MyForm = null;
System.Type TForm = System.Reflection.Assembly.GetExecutingAssembly(). GetTypes().Where(t => t.Name == FormType).First();
MyForm = (Form)System.Activator.CreateInstance(TForm, clsFormsOpenOption.frmDarkhastAnjamKhadamat.See);
MyForm.ShowDialog();


از try catch استفاده کردم و یک برک پوینت در قسمت catch گذاشتم که این ارور رو داد:

Exception has been thrown by the target of an invocation.

Kubuntu
پنج شنبه 04 مهر 1392, 08:43 صبح
اول ببین MyForm.Show کار میکنه بعد showDialog کن. چون واسه showDialog در فرم MyForm باید یه دکمه وجود داشته باشد که مقدار dialogResult در property آن باید مقداردهی شده یاشد(ok یا کنسل یا هرچیزدیگه) تا فرم شما بدون خطا نمایش داده بشه

forodo
پنج شنبه 04 مهر 1392, 11:04 صبح
اول ببین MyForm.Show کار میکنه بعد showDialog کن. چون واسه showDialog در فرم MyForm باید یه دکمه وجود داشته باشد که مقدار dialogResult در property آن باید مقداردهی شده یاشد(ok یا کنسل یا هرچیزدیگه) تا فرم شما بدون خطا نمایش داده بشه
اگر فرمم ورودی نداشته باشه ( یعنی clsFormsOpenOption.frmDarkhastAnjamKhadamat.See رو نخواد ) بدون هیچ مشکلی باز می کنه.
ولی برای فرمهایی که ورودی می خواد هم با Show و هم با showDialog تست کردم نشد.
با Show هم که انجام می دم باز همین ارور رو میده

Exception has been thrown by the target of an invocation.

forodo
پنج شنبه 04 مهر 1392, 11:57 صبح
از شما Kubuntu (http://barnamenevis.org/member.php?164108-Kubuntu) و از شما مهرداد صفا (http://barnamenevis.org/member.php?261217-%D9%85%D9%87%D8%B1%D8%AF%D8%A7%D8%AF-%D8%B5%D9%81%D8%A7) واقعاً متشکرم.
راه حل شما درست بود، تقصیر خودم بود.
وقتی که فرم باز می شد یه سلکتی وجود داشت که باید یک مقداری رو از کلاسی می گیرفت.
اون رو درست کردم مشکل حل شد.
باز هم ممنون.