PDA

View Full Version : مشکل در فراخوانی شی از فرم دیگر



saeedhushmand
شنبه 10 تیر 1391, 19:02 عصر
دوستان من کد زیر نوشتم اما متن داخل label در textbox نمی نویسه دلیل چیه....

add_word frm = new add_word();
frm.textBox2.Text = label1.Text;
frm.Show();

Kamal_camaro
شنبه 10 تیر 1391, 20:21 عصر
بهترین راهی که به نظر من میرسه اینه که شما یه شی از نوع public و Global درست کنی ، مقدار تکست باکست رو اونجا بریزی بعد از اینور بخونیش !!!

من خودم از این راه استفاده میکنم ،

اگه مشکلت حل نشد بگو تا نمونه کد بذارم !!!

neda_1367_sh
شنبه 10 تیر 1391, 23:34 عصر
بهترین راهی که به نظر من میرسه اینه که شما یه شی از نوع public و Global درست کنی ، مقدار تکست باکست رو اونجا بریزی بعد از اینور بخونیش !!!

من خودم از این راه استفاده میکنم ،

اگه مشکلت حل نشد بگو تا نمونه کد بذارم !!!
سلام
منم همین مشکلو دارم
کدم اینه
Form2 f2 = new Form2 ();
f2.ShowDialog();
f2.Text = "hi";
f2.label1.text = "hi";
خط 3 هیچ کار انجام نمیده خط 4 هم error داره
از این روش global هم نتونستم استفاده کنم.
میشه هم برا عنوان صفحه هم برا ابزاراش بگید جیکار کنم دقیقا؟

Y_Safaiee
شنبه 10 تیر 1391, 23:42 عصر
با سلام خدمت شما دوست عزیز

راحتترین کار اینه که در program.cs یه متغییر سراسری تعریف کنید اینطوری :


public static string name = "hello";


حالا این متغییر در تمامی فرمهای پروژتون قابل دستیابیه اینطوری :



string str = Program.name;


به همین راحتی

موفق باشین
بایت بایت

the king
یک شنبه 11 تیر 1391, 00:04 صبح
بصورت پیشفرض این کنترل هایی که روی فرم قرار می دهید بصورت Private تعریف می شوند و بعضی هاشون حتی جزئی از متغیر های کلاس فرم هم
نیستند. زمانی که فرم را طراحی می کنید کنترل مورد نظر (فرضا TextBox) را روی فرم انتخاب کنید. بعد در لیست مشخصه های پنجره Properties
Modifiers اش را ببینید. اگر Private است به Public تغییر اش دهید. در ضمن به مشخصه GenerateMember هم توجه کنید که باید True باشه، چون
اگر False باشه اصلا برای اون کنترل یک متغیر خاص در کلاس فرم در نظر گرفته نمیشه و دسترسی بهش دشوار خواهد شد.

یک مورد دیگه، اگر در کد های فرم Form1 یک فرم Form2 ساختید و نمایش اش دادید، می توانید برای Form2 ای که می سازید یک متغیر مثل f2 در نظر بگیرید و
از داخل اون یکی فرم فرضا f2.textBox1 را کنترل کنید :

Form2 f2 = new Form2();
f2.textBox1.Text = "test";


اما حالا فرم f2 چطوری از فرم Form1 مقداری رو بخونه؟ از اونجایی که f2 از نمونه فرم Form1 شما اطلاعی نداره، باید به طریقی
متغیری مثل f1 رو در اختیار Form2 قرار دهید، فرضا با ویرایش کردن کد های Program.cs

static class Program
{
public static Form1 f1;

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
f1 = new Form1();
Application.Run(f1);
}
}


یا اینکه به طریقی به اون فرم f2 اعلام کنید که کدوم Form1 ای ایجاد اش کرده :

Form2 f2 = new Form2();
f2.f1 = this;



public partial class Form2 : Form
{
public Form1 f1 = null;


راه های دیگه ای هم هست که فرضا خود فرم Form2 از روی پنجره هایی که باز هستند نمونه Form1 ای که در حال نمایشه پیدا کنه و ...

neda_1367_sh
یک شنبه 11 تیر 1391, 00:14 صبح
public static string name = "hello";
تو program.cs همینجوری تعریف کردم
بقیشم اینجوری نوشتم
string str = Program.name;
f2.Text = str;
f2.label1.text = str;
باز هم خط 2 هیچ کار نمیکنه خط 3 هم error داره کلا
اگه 1 متغیر دیگه مثل myreader داشته باشم به این صورت باید با public میخوام تعریف کنم از چه نوعی تعریف کنم؟
myReader = cmd.ExecuteReader();

Y_Safaiee
یک شنبه 11 تیر 1391, 00:20 صبح
با سلام مجدد
دیگه به خط 2 و 3 نیازی نیست,چه کاریه برید تو فرم لود فرم دومتون بنویسید


label1.text=program.name;

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



نام کنترل.text = program.نام متغیر


موفق باشین
بایت بایت

neda_1367_sh
یک شنبه 11 تیر 1391, 00:40 صبح
با سلام مجدد
دیگه به خط 2 و 3 نیازی نیست,چه کاریه برید تو فرم لود فرم دومتون بنویسید


label1.text=program.name;

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



نام کنترل.text = program.نام متغیر


موفق باشین
بایت بایت

آخه مشکل اینه که تو if فرم اولیس من چجوری تو فرم دومی اون دستورو بنویسم!
کلا راه the king با این که خیلی سخت بود انجام دادم اما نشد در ضمن اون فرمه فرم اصلی برنامه نیست که من از اونجا run کنم.
فکر کنم باید قیدشو بزنم

veniz2008
یک شنبه 11 تیر 1391, 01:17 صبح
با سلام،اگر درست متوجه شده باشم میخواید مقادیر رو بین چند فرم انتقال بدید،بهترین روش رو آقای Youuness (http://barnamenevis.org/member.php?78417-Youuness) گفته بودن،من همون روش رو برای دو تا فرم توضیح میدم:

فرض کنید 2 فرم با عنوان فرم1 و فرم2 داریم،بر روی فرم 1، یک textbox و یک دکمه و بر روی فرم 2،یک label داشته باشیم،میخواهیم که با کلیک بر روی دکمه،مقدار textbox مربوط به فرم1 را درون label مربوط به فرم2 نمایش دهیم،برای این کار داریم:

در فرم اول متغییری را که می خواهیم در فرم 2 ببینیم به صورت public static string st تعریف میکنیم و در form2 به این شکل به آن دسترسی پیدا میکنیم form1.st

کد کامل آن بصورت زیر میباشد:

کدهای مربوط به فرم 1 :


public static string st;


private void button1_Click(object sender, EventArgs e)
{
st = textBox1.Text;
Form2 frm2 = new Form2();
frm2.ShowDialog();
}

کدهای مربوط به فرم 2 :


private void Form2_Load(object sender, EventArgs e)
{
label1.Text = Form1.st;


}

alexmcse
یک شنبه 11 تیر 1391, 02:51 صبح
راحتترین راه تعریف کنترل مثلا label + کلمه کلیدی internal
internal public label
در فرم برنامه است

:تشویق::تشویق:

neda_1367_sh
یک شنبه 11 تیر 1391, 11:03 صبح
با سلام،اگر درست متوجه شده باشم میخواید مقادیر رو بین چند فرم انتقال بدید،بهترین روش رو آقای Youuness (http://barnamenevis.org/member.php?78417-Youuness) گفته بودن،من همون روش رو برای دو تا فرم توضیح میدم:

فرض کنید 2 فرم با عنوان فرم1 و فرم2 داریم،بر روی فرم 1، یک textbox و یک دکمه و بر روی فرم 2،یک label داشته باشیم،میخواهیم که با کلیک بر روی دکمه،مقدار textbox مربوط به فرم1 را درون label مربوط به فرم2 نمایش دهیم،برای این کار داریم:

در فرم اول متغییری را که می خواهیم در فرم 2 ببینیم به صورت public static string st تعریف میکنیم و در form2 به این شکل به آن دسترسی پیدا میکنیم form1.st

کد کامل آن بصورت زیر میباشد:

کدهای مربوط به فرم 1 :


public static string st;


private void button1_Click(object sender, EventArgs e)
{
st = textBox1.Text;
Form2 frm2 = new Form2();
frm2.ShowDialog();
}

کدهای مربوط به فرم 2 :


private void Form2_Load(object sender, EventArgs e)
{
label1.Text = Form1.st;


}


ممنون از شما ولی این روش برا ثابت عمل کرد اما برا متفیر نه
البته دفعه اول که فرم لود میشه نشون نمیده اگه فرمو ببندم 2باره باز کنم متغیرو نشون میده:متعجب:
SqlDataReader myReader;
Program.myReaderm = myReader.GetString(1);
Program.number = 2 + 2;
متغیر myreader رو تو program.cs از چه نوعی باید تعریف کنم؟
number رو هم امتحانی گذاشتم گفتم شاید مشکل از نوع متغیرم باشه ولی تا متغیرا دفعه ی دوم نشون داده میشه.
اینم کد فرم 2 برا st که مقدارشو تو خود program.cs دادم مشکلی نداره و همون دفعه اول نشون میده.
label1.Text = Program.st + Program.myReaderm;
this.Text = Program.st + Program.myReaderm + Program.number;

veniz2008
یک شنبه 11 تیر 1391, 11:37 صبح
ممنون از شما ولی این روش برا ثابت عمل کرد اما برا متفیر نه
البته دفعه اول که فرم لود میشه نشون نمیده اگه فرمو ببندم 2باره باز کنم متغیرو نشون میده:متعجب:
SqlDataReader myReader;
Program.myReaderm = myReader.GetString(1);
Program.number = 2 + 2;
متغیر myreader رو تو program.cs از چه نوعی باید تعریف کنم؟
number رو هم امتحانی گذاشتم گفتم شاید مشکل از نوع متغیرم باشه ولی تا متغیرا دفعه ی دوم نشون داده میشه.
اینم کد فرم 2 برا st که مقدارشو تو خود program.cs دادم مشکلی نداره و همون دفعه اول نشون میده.
label1.Text = Program.st + Program.myReaderm;
this.Text = Program.st + Program.myReaderm + Program.number;
من بارها برای انتقال مقادیر بین فرم ها از همون کدهایی که گذاشتم استفاده کردم، چرا از datareader استفاده کردید؟،کاربردش تو جملات بالا چیه؟،من این کدهایی رو که گذاشتم بارها توآموزش های زبان اصلی دیدم( البته اینو بگم که تنها راه نیست ولی راه ساده و قابل فهمی هست).یه چیز دیگه، وقتی از textbox میخونید یعنی عملا مقدار متغیر هست نه یه مقدار ثابت از قبل تعریف شده.

Y_Safaiee
یک شنبه 11 تیر 1391, 12:20 عصر
با سلام مجدد

واستون دوتا برنامه کوچیک نوشتم تا متوجه شین چه طوری متغییر تعریف و ازش تو فرم هاتون استفاده کنید,تو برنامه اول با استفاده از Program.cs و تو برنامه دوم با استفاده از Public کردن لیبل تو فرم دومه,حتی براتون یه متغییر برای جابجایی اطلاعات دیتابیستونم تعریف کردم

1.به Program.cs و متغییرهای توش دقت کنید
2.به Form1 و ذخیره نام کاربر در متغییر سراسری دقت کنید
3.به Form2 و فراخوانی نام کاربر و اطلاعات دقت کنید.

موفق باشین
بایت بایت