PDA

View Full Version : سوال: واکشی نام فرم از جدول و نمایش فرم مربوطه



elahe1364
یک شنبه 23 فروردین 1388, 15:22 عصر
سلام دوستان
من در یک پروژه تعداد زیادی فرم دارم. حالا می خوام نام این فرم ها را در یک جدول از دیتابیسم ذخیره کنم و طبق شرایط خاصی نام فرم موردنظر را از جدول واکشی و فرم مربوطه را نمایش بدهم.
آیا این کار عملی هست؟
فرم ها را از چه نوعی در جدول ذخیره کنم و بعد از واکشی چگونه اون رو تبدیل به شی ء فرم کنم؟

ممنون از کمک و توجهتون

NewFoxStudent
یک شنبه 23 فروردین 1388, 15:25 عصر
من توی پروژه هام به هر فرم یه ID میدم و تمام خواص فرم رو توی بانک ذخیره میکنم
و از این جدول برای اجرای فرم هام استفاده میکنم
راه جالبیه

elahe1364
دوشنبه 24 فروردین 1388, 07:13 صبح
خوب منم میخوام همین کارو کنم
ولی چه خصوصیتی از فرم رو ذخیره کنم که بتونم به وسیله اون فرم رو show کنم؟
میشه بیشتر توضیح بدید؟

hana2064
دوشنبه 24 فروردین 1388, 08:56 صبح
اگه منظورت ایجاد محدودیت در دسترسی به فرم هاست میتونی تو رکوردی که برای هر کاربر برای ورود به برنامه استفاده میکنی فیلدهایی از نوع bit (صفر برای عدم دسترسی و یک دسترسی مجاز) برای نمایش فرم و همینطور دکمه های معمول مثل ثبت ویرایش وحذف وبقیه موارد بذاری که من قبلا این کارو کردم .
اگه سر چ کنی تعیین سطح دسترسی پیدا میکنی
موفق باشی

NewFoxStudent
دوشنبه 24 فروردین 1388, 09:28 صبح
برای اجرای فرم از نام فرم استفاده میکنم
به این صورت که نام فرم رو از بانک میخونم و توی کد از یه Switch استفاده میکنم وبا توجه به نام ، فرم مربوط رو اجرا میکنم

NewFoxStudent
دوشنبه 24 فروردین 1388, 10:59 صبح
switch(editfrmName)
{
case "JobTitle":
editJobTitle frmJobTitle = new editJobTitle();
frmJobTitle.set_jobTitleInfo(ID);
frmJobTitle.ShowDialog();
break;
case "MissionType":
editMissionType frmMissionType = new editMissionType();
frmMissionType.Set_MissionTypeInfo(ID);
frmMissionType.ShowDialog();
break;
case "LeaveType":
editLeaveType frmLeaveType = new editLeaveType();
frmLeaveType.Set_LeaveTypeInfo(ID);
frmLeaveType.ShowDialog();
break;
case "Military":
editMilitary frmMilitary = new editMilitary();
frmMilitary.set_MilitaryInfo(ID);
frmMilitary.ShowDialog();
break;
case "Controller":
editController frmController = new editController();
frmController.Set_ControllerInfo(ID);
frmController.ShowDialog();
break;
case "Marrid":
editMarrid frmMarrid = new editMarrid();
frmMarrid.Set_MarridInfo(ID);
frmMarrid.ShowDialog();
break;
case "DocumentStudy":
editDocumentStudy frmDocument = new editDocumentStudy();
frmDocument.Set_DocumentStudyInfo(ID);
frmDocument.ShowDialog();
break;
case "Shift":
editShift frmShift = new editShift();
frmShift.Set_ShiftInfo(ID);
frmShift.ShowDialog();
break;
case "Personel":
editPersonel frmPersonel = new editPersonel();
frmPersonel.Set_PersonelInfo(ID);
frmPersonel.ShowDialog();
break;
case "WorkGroup":
editWorkGroup frmWorkGroup = new editWorkGroup();
frmWorkGroup.Set_WorkGroupInfo(ID);
frmWorkGroup.ShowDialog();
break;
case "WorkUnit":
editWorkUnit frmWorkUnit = new editWorkUnit();
frmWorkUnit.Set_WorkUnitInfo(ID);
frmWorkUnit.ShowDialog();
break;
case "AttData":
editCardRecord frmeditcard = new editCardRecord(ID);
frmeditcard.ShowDialog();
break;
case "Car":
editCar frmeditcar = new editCar(ID);
frmeditcar.ShowDialog();
break;
}

elahe1364
دوشنبه 24 فروردین 1388, 15:04 عصر
ممنون از جوابتون
ولی راه استفاده از switch به ذهنم رسیده بود می خواستم ببینم راه بهتری وجود نداره که مثلا بشه رشته واکشی شده از بانک رو تبدیل به فرم کرد یا ...

NewFoxStudent
دوشنبه 24 فروردین 1388, 15:07 عصر
من هم خیلی دنبالش گشتم ولی به نتیجه نرسیدم
اگه به جواب رسیدید به ما هم خبر بدید

elahe1364
دوشنبه 24 فروردین 1388, 18:37 عصر
دوستان من این کد رو پیدا کردم با vb
ولی نتونستم تبدیل به C# کنم
لطفا یکی از دوستان تبدیلش کنه تا ببینیم به درد می خوره یا نه

Imports System.Reflection
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
Dim frm As New Form
Dim formName As String = "Form1"
formName = [Assembly].GetEntryAssembly.GetName.Name & "." & formName
frm = DirectCast([Assembly].GetEntryAssembly.CreateInstance(formName), Form)
frm.Show()
End Sub End Class

اینم لینکش

http://www.vbforums.com/showthread.php?t=538427

NewFoxStudent
دوشنبه 24 فروردین 1388, 18:59 عصر
using System.Reflection;




Form frm = new Form();
string formName = "Form1";
formName = Assembly.GetEntryAssembly().GetName() + &"." & formName;
frm = (Form)Assembly.GetEntryAssembly().CreateInstance(f ormName);
frm.Show();

NewFoxStudent
دوشنبه 24 فروردین 1388, 19:06 عصر
راه حل سوال همینه



frm = (Form)Assembly.GetEntryAssembly().CreateInstance(f ormName);
frm.Show();

elahe1364
سه شنبه 25 فروردین 1388, 05:56 صبح
یعنی این کد به شما جواب داد؟
برای من که اول رو ی کاراکتر & توی خط 3 خطا میده .
وقتی هم پاکش کردم یه run time error داد.

NewFoxStudent
سه شنبه 25 فروردین 1388, 13:08 عصر
درستش اینه
کاراکتر & در VB برابر با + در C#


Form frm = newForm();
string formName = "Form1";
formName = Assembly.GetEntryAssembly().GetName() + "."+formName;
frm = (Form)Assembly.GetEntryAssembly().CreateInstance(f ormName);
frm.Show();

NewFoxStudent
سه شنبه 25 فروردین 1388, 13:11 عصر
فرض کنید نام پروژه شما Prj باشه
یه فرم توی پروژه Add کنید فرضاً با نام form1
حالا این دستورات یه شی از فرم form1 میسازه با استفاده از نام فرم



string formName = "Prj.form1";
frm = (Form)Assembly.GetEntryAssembly().CreateInstance(f ormName);
frm.Show();

elahe1364
سه شنبه 25 فروردین 1388, 14:59 عصر
دوست عزیز شما این دستورات رو داخل خود محیط اجرا کردید؟
نمی دونم چرا نهایتا داخل frm ، هیچی نمیره و null میشه
اگه لطف کنید داخل محیط vs اجرا کنید و نتیجه رو بگید ممنون میشم

NewFoxStudent
سه شنبه 25 فروردین 1388, 15:43 عصر
من داخل VS اجرا کردم و جواب هم گرفتم

NewFoxStudent
سه شنبه 25 فروردین 1388, 15:56 عصر
این پروژه رو ببینید
29958

elahe1364
چهارشنبه 26 فروردین 1388, 15:03 عصر
متشکرم
من این خط کد هم میذاشتم که ظاهرا نباید گذاشت

formName = Assembly.GetEntryAssembly().GetName() + "." + formName;

NewFoxStudent
چهارشنبه 26 فروردین 1388, 15:55 عصر
این خط کد برای اینه که یه همچین چیزی رو بوجود بیاره


projectName.projectNameSpace.formname

که من توی مثال بالا قسمت projectName.projectNameSpace رو دستی تنظیم کردم
امیدوارم متوجه شده باشید