PDA

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



seniamail
یک شنبه 20 مرداد 1387, 07:34 صبح
با سلام
چگونه میتوانیم از یک کلاس به یک کنترل در یک فرم دسترس داشته باشیم؟
مثلا ما یک Textbox با یک اسم خاص در چند فرم داریم. میخواهیم به آن Textbox که در حال حاضر، فرم آن فعال است اشاره کنیم.

h.jaza
یک شنبه 20 مرداد 1387, 10:16 صبح
من درست متوجه نشدم. می شه بیشتر توضیح بدی.:متفکر:

اگر منظورت اینه که ما چند تا فرم داریم و هر کدوم از این فرم ها یه سری کنترل از جمله تکست

باکس دارن و در حالات خاصی چند تا از این تکست باکس ها در این چند تا فرم حالت یکسانی

براشون رخ می ده و به خاطر اون یه کلاس تعریف کردی که بتونی بهینه بکنی کدتو؛ خوب خیلی

ساده توی یکی از رویدادهای هر کدوم از فرم هات (متناسب با کارت)، مثلا مقدار تکست اون

تکست باکسو به عنوان آوگومان به تابعی از اون کلاسی که تعریف کردی می فرستی و تمام...:گیج:

Sal_64
یک شنبه 24 آذر 1387, 10:48 صبح
سلام


چگونه میتوانیم از یک کلاس به یک کنترل در یک فرم دسترس داشته باشیم؟سوال من هم دقیقا همینه
ما کلاسی داریم که قراره متن یک تکست باکس رو بگیره و در فرمی دیگه اون کلاس new شه و مقدار تکست باکس رو ازش بگیریم


دوستان عزیز می تونن در 3-4 خط کد توضیح بدن ؟ :قلب:


با تشکر

SMRAH1
یک شنبه 24 آذر 1387, 14:52 عصر
سلام

فرض کنید فرمی به نام Form1 دارید که در آن یک TextBox به نام txt1 وجود دارد.حالا در فرمی دیگر میخواهید یک دسترسی به txt1 از فرم Form1 داشته باشید.منطقا فرم Form1 بارگذاری شده است.در این حال می توانید از کدی شبیه به این استفاده کنید:


foreach (Form f in Application.OpenForms)
{
if (f is Form1)
{
TextBox txt = (TextBox)f.Controls["txt1"];
MessageBox.Show(txt.Text);
}
}اگر چند نمونه از فرم Form1 باز شده باشند،باید راهی برای تمایش آنها بیابید مثلا عنوان آنها یکتا باشد یا مقدار یک کنترل آن منحصربفرد باشد یا ...

برای بدست آوردن فرم فعال جاری نیز می توانید از خصوصیت استاتیک ActiveForm در کلاس Form کمک بگیرید.

موفق باشید

Sal_64
یک شنبه 24 آذر 1387, 15:32 عصر
سلام

تشکر:بوس:

اینطور در نظر بگیرید
فرم اصلی برنامه شماره یک است
فرم شماره دو باز میشه در تکست باکس اون رشته ای وارد می شود
و سپس فرم شماره دو بسته می شود

حال اگر فرم شماره 3 باز شود و بخواهیم مقدار تکست باکس فرم دوم رو داشته باشیم.
چه باید کرد؟

البته به دلیل اینکه فرم یک که فرم اصلی است میشه مقدار رو از فرم دو گرفت و در فرم اصلی گذاشت
و اگر فرم سه باز شد مقدار تکست رو از فرم اصلی بگیره و بده به فرم سوم
آیا این شیوه درسته هست و اگر درست هست با اصول OOP مغایرتی نداره؟


با تشکر

h.jaza
یک شنبه 24 آذر 1387, 17:10 عصر
SMRAH1 (http://barnamenevis.org/forum/member.php?u=44567) عزیز جوابی که دادین، وسه ی زمانی هستش که فرم مورد نظر باز هستش ولی اگر نبود چی؟؟؟

به غیر از این بنظرم یکم کار و سخت کردین. میشه خیلی ساده تر با فرستادن متن اون تکست باکس به تابع مورد نظر از کلاس، این کارو انجام داد.

اگر بخوام خیلی ساده بگم، میشه:


MyClass member = new MyClass(textbox1.Text);


که میاد و متن تکست باکس رو (یا هر چیز دیگه ای رو) به عنوان پارامتر به تابع سازنده ی کلاسمون می فرسته.
... به همین سادگی ...

Sal_64
دوشنبه 25 آذر 1387, 16:43 عصر
سلام

درست متوجه نشدم

من اینکار رو کردم ببینین
در فرم دوم

rt.rt2(tb_user.Text);

public class rt
{
public static string fg = "";

public static string rt2(string us)
{
fg = us;
return fg;
}

}و در فرم سوم

MessageBox.Show(project.form2.rt.fg);میشه درستش کنید ؟:خجالت:

با تشکر

h.jaza
دوشنبه 25 آذر 1387, 17:54 عصر
دوست عزیز کدت مشکل اساسی ای نداره. :لبخند:
همین.
البته نمی دونم نیازی به استاتیک تعریف کردن متغیرت داری یا نه ؟؟؟ :متفکر:
ولی در کل شبیه همونی هستش که باید باشه. (اصولی) البته شبیه. :لبخند:

همون طوری که گفتم می تونی هر جا که نیاز شد، متن تکست باکست رو به عنوان پارامتر به تابع مورد نظرت بفرستی، یعنی:



//In Source Form
Form2 f2 = new Form2(txtBox.Text);

//In Destination Form
public Form1(string form1TextBox)
{
string sourceTextBox = form1TextBox;
InitializeComponent();
}

Sal_64
دوشنبه 25 آذر 1387, 22:54 عصر
سلام

h.jaza عزیز جوابی که دادین، وسه ی زمانی هستش که فرم مورد نظر باز هستش ولی اگر نبود چی؟؟؟ :لبخند:

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

توضیحات اضافی در پست 5 داده شده


اما الان چیز دیگه ای رو می خوام
با استفاده از کلاس اینکار رو پیاده کرد

چه باید کرد؟؟

با تشکر

SMRAH1
سه شنبه 26 آذر 1387, 10:04 صبح
سلام

با توجه به توضیحات داده شده،فکر کنم جوابتون رو توی اینجا (http://barnamenevis.org/forum/showpost.php?p=605332&postcount=150) بگیرید.به خصوص قسمت سوم Source.در این قسمت لطلاعات هر فرم در یک کلاس واحد برای تامام فرمها ،ذخیره شده و قابل دستیابی است.

موفق باشید

seniamail
چهارشنبه 25 دی 1387, 12:28 عصر
سلام


Application.OpenForms["form1"].Controls["textBox1"].Enabled = true;

اوبالیت به بو
چهارشنبه 25 دی 1387, 12:57 عصر
يه راه ساده ولي زياد پيشنهاد نمي كنم. فرض كنيد:


Scope Form2:
Form1 obj = new Form1();
Public string Name2;
Name2=TextBox1.Text;
obj.Name1=Name2;
this.Close();
Form1:
Form2 obj= new Form2();
Public string Name1;
obj.ShowDialog();
Name1=obj.Name2;
TextBox1.Text=Name1;
به قسمت سبز رنگ دقت كنيد. وقتي كه من Name1 رو از متغير Name2 از Form2 مي خوام بگيرم اول Form2 رو ShowDialog مي كنم. در اين موقع Cursor برنامه تويه Form1 مي مونه و ميره متغير Name2 رو مقداردهي مي كنه و به متغير Name1 در Form1 پاس مي ده و بعد Close ميشه و Cursor دوباره كارش رو ادامه مي ده.
البته خط آبي رنگ رو مي تونيد ننويسيد و مستقيم TextBox رو از Form2 مقدار دهي كنيد. نيت فقط خوانايي بود.