PDA

View Full Version : تغییر عنوان یک فرم توسط فرم دیگر



Mrs.Net
چهارشنبه 22 شهریور 1385, 13:40 عصر
یک فرم اصلی دارم که یک فرم دیگه رو صدا میزنه
میخوام داخل این فرم دوم بتونم خاصیت text فرم اول رو تغییر بدم
(یک روش حرفه ای میخوام)
خیلی موضوعات راجب این تو سایت بود اما هیچکدوم جواب درستی نداشتند

محمد میرمصطفی
چهارشنبه 22 شهریور 1385, 16:43 عصر
هر فرم یه property داره به نام owner، شما می‏تونید هنگام ایجاد فرم دوم، این property رو مساوی فرم اول بذارید و تو فرم دوم text اون رو تغییر بدید. اگه فرم اول، فرم اصلی Application هست راه بهتری هم داره. اگه خواستید بفرمایید تا بگم.

mansoor_csharp
چهارشنبه 22 شهریور 1385, 20:34 عصر
مطلب زیر در سایت csarp-corner.com واقعاً خیلی جالبه حتماً بخونیدش شاید یک بار برای همیشه بتونه جواب این گونه سوالات را بده من که خیلی استفاده کردم
Home>>Windows Forms>>Using Delegates to communicate between Windows Forms
این آدرس در سایت csharp-corner.com ast

mahani
پنج شنبه 23 شهریور 1385, 01:36 صبح
جواب این سوال دقیقا دسترسی objectها به یکدیگر است ولی مشکل اینجا است که Form1 در ابتدای برنامه در heap ایجاد میشود ولی refrenceاش در متغیری نگهداری نمیشود.برای این سوال میتوان methodی در Form2 تعریف کرد و Form1 refrence را که همان this است به آن method فرستاد در اینصورت میتوان به Form1 دسترسی داشت و textاش را عوض کرد.

یک راه حل کلی هم وجود دارد برای وقتی که چندین form داریم و میخواهیم همه به یکدیگر دسترسی داشته باشند پس باید به refrence تمام formها دسترسی داشته باشیم.حال کافیست در هر classی که formی ایجاد میشود form refrenceها را در fieldی public قرار دهیم.
مثال: Form1 در class program ساخته میشود پس این کار را میکنیم...

static class Program

{
public static Form1 form1;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
form1 = new Form1();
Application.Run(form1);

}
}




public partial class Form2 : Form

{
public Form2()
{
InitializeComponent();
Program.form1.Text = "12345";
}
}

Mrs.Net
پنج شنبه 23 شهریور 1385, 17:04 عصر
هر فرم یه property داره به نام owner، شما می‏تونید هنگام ایجاد فرم دوم، این property رو مساوی فرم اول بذارید و تو فرم دوم text اون رو تغییر بدید.
نفهمیدم چی شد!
یعنی text هردو یکی بشه؟!

اگه فرم اول، فرم اصلی Application هست راه بهتری هم داره. اگه خواستید بفرمایید تا بگم.
اگه غیر از استفاده از parent هست ممنون میشم بفرمایید.


مطلب زیر در سایت csarp-corner.com واقعاً خیلی جالبه حتماً بخونیدش شاید یک بار برای همیشه بتونه جواب این گونه سوالات را بده من که خیلی استفاده کردم
خوب بود اما واقعا این کار حرفه ایه برای کاری که من میخوام؟
خیلی پیچیده اش کرده


جواب این سوال دقیقا دسترسی objectها به یکدیگر است ولی مشکل اینجا است که Form1 در ابتدای برنامه در heap ایجاد میشود ولی refrenceاش در متغیری نگهداری نمیشود.برای این سوال میتوان methodی در Form2 تعریف کرد و Form1 refrence را که همان this است به آن method فرستاد در اینصورت میتوان به Form1 دسترسی داشت و textاش را عوض کرد.
ممنون. از این راه استفاده میکردم (البته در شرایطی میشه از parent استفاده کرد)

ممنون از همه

محمد میرمصطفی
پنج شنبه 23 شهریور 1385, 17:46 عصر
// In form 1
Form2 frm = new Form1();
frm.Owner = this;
frm.Show();

// In form 2
Form1 frm = (Form1)this.Owner;
frm.Text = "Test";

--------------------
منظور من در مورد فرم اصلی هم همونیه که جناب ماهانی فرمودن.