PDA

View Full Version : سوال: تغییر وضعیت فرم از روی کلاس



mehran788
شنبه 31 تیر 1391, 12:44 عصر
با سلام و خسته نباشید
من کلاسی در برنامه ایجاد کردم و می خوام این کلاس تغییراتی رو در فرم ایجاد بده و سپس فرم رو نمایش بده مثلا متن لیبل رو تغییر بده یا عکس درون پیکچر باکس رو تغییر بده و سپس فرم رو اجرا کنه.
ممنون می شم راهنمایی کنید.

H.Yousefi
شنبه 31 تیر 1391, 13:17 عصر
سلام.
متوجه منظورت نشدیم. کامل توضیح بده.

hossein16
شنبه 31 تیر 1391, 14:02 عصر
سلام دوست عزیز
اول روی فرمت یک Label قرار بده بعد هم یک کلاس مثل کلاس زیر بنویس

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace testB
{
class loadclass
{
public string str = "BARNAMENEVIS.ORG";
public void setLabelOnForm(Label lb)
{
lb.Text = str;
}
}
}


حالا تو قسمت form_load کدهای زیر را وارد کن

private void Form1_Load(object sender, EventArgs e)
{
loadclass load = new loadclass();
load.str = "برنامه نویس";
load.setLabelOnForm(label1);
}

اگر مشکلت حل نشد بگو تا بیشتر کمکت کنم

mehran788
یک شنبه 01 مرداد 1391, 09:57 صبح
سلام و ممنونم از توجهتون
شرمنده مشکل من با این حل نمیشه چون من نمی خوام که تو همون فرم کلاس رو فراخوانی کنم.کل هدف من اینه یک کلاس بنویسم که توش یک تابع باشه وقتی این تابع از کلاس رو از هرجای برنامه (از هر فرم بشه اینکار رو کرد) فراخوانی بکنم مثلا در فرم 1 متن لیبل و عکس موجود در پیکچر باکس و عنوان فرم رو تغییر بده و فرم 1 رو نمایش بده.
بازم شرمنده که وقتتون رو گرفتم

mehran788
یک شنبه 01 مرداد 1391, 19:10 عصر
کسی راه حلی نداره؟؟؟؟؟؟؟؟؟؟؟

the king
یک شنبه 01 مرداد 1391, 21:41 عصر
سلام و ممنونم از توجهتون
شرمنده مشکل من با این حل نمیشه چون من نمی خوام که تو همون فرم کلاس رو فراخوانی کنم.کل هدف من اینه یک کلاس بنویسم که توش یک تابع باشه وقتی این تابع از کلاس رو از هرجای برنامه (از هر فرم بشه اینکار رو کرد) فراخوانی بکنم مثلا در فرم 1 متن لیبل و عکس موجود در پیکچر باکس و عنوان فرم رو تغییر بده و فرم 1 رو نمایش بده.
بازم شرمنده که وقتتون رو گرفتم

اگه Form1 رو قراره اون تابع نمایش بده، پس یعنی الان Form1 نمایش داده نشده، اون تابع خودش یک نمونه از Form1 رو می سازه
و هر بلایی که خواست سرش میاره و نهایتا نشون اش میده :


public class Class1
{
public static void ShowForm1()
{
Form1 f1 = new Form1();
System.Windows.Forms.PictureBox p
= (System.Windows.Forms.PictureBox)f1.Controls["pictureBox1"];
p.Image = f1.Icon.ToBitmap();
f1.Controls["label1"].Text = "Hello";
f1.Show();
}
}


و مثلا نحوه استفاده :

private void button1_Click(object sender, EventArgs e)
{
Class1.ShowForm1();
}

mehran788
دوشنبه 02 مرداد 1391, 14:01 عصر
ممنون مشکلم حل شد
ولی یه سوال دیگه هم بوجود اومد.
من میخوام اگه تو یه فرم دیگه مثلا فرم 2 وقتی این کلاس رو فراخوانی می کنم ادامه کد های این فرم اجرا نشه و فرم 2 منتظر بمونه تا با بسته شدن فرم 1 مقداری برگشت داده بشه به فرم 2 و ادامه کد ها اجرا بشه.
من واسه این کار دو چیز رو لازم دارم:1-چطور میتونم نذارم ادامه کد ها تا زمان بستن فرم 1 اجرا بشه2-چطور می تونم با بستن فرم 1 مقداری رو به فرم 2 بفرستم(البته احتمال داره این کلاس از یک فرم دیگه هم فراخوانی بشه)

the king
سه شنبه 03 مرداد 1391, 00:12 صبح
ممنون مشکلم حل شد
ولی یه سوال دیگه هم بوجود اومد.
من میخوام اگه تو یه فرم دیگه مثلا فرم 2 وقتی این کلاس رو فراخوانی می کنم ادامه کد های این فرم اجرا نشه و فرم 2 منتظر بمونه تا با بسته شدن فرم 1 مقداری برگشت داده بشه به فرم 2 و ادامه کد ها اجرا بشه.
من واسه این کار دو چیز رو لازم دارم:1-چطور میتونم نذارم ادامه کد ها تا زمان بستن فرم 1 اجرا بشه2-چطور می تونم با بستن فرم 1 مقداری رو به فرم 2 بفرستم(البته احتمال داره این کلاس از یک فرم دیگه هم فراخوانی بشه)
فرم رو بجای Show با ShowDialog نمایش دهید، فرمی که با ShowDialog نمایش داده میشه مثل پنجره های Open و Save می مونه، تا زمانی که بازه کد ای که فراخوانی اش
کرده منتظر می مونه، اصولا این فرمی که فراخوانی شده توسط مشخصه DialogResult مقداری رو بر می گردونه، مثلا DialogResult.OK
اگر نیاز به نوع داده دیگری دارید، از مشخصه Tag استفاده کنید. یعنی در اون فرم در مشخصه Tag بنویسید و در بازگشت f1.Tag را بخوانید.

mehran788
سه شنبه 03 مرداد 1391, 12:21 عصر
فرم رو بجای Show با ShowDialog نمایش دهید، فرمی که با ShowDialog نمایش داده میشه مثل پنجره های Open و Save می مونه، تا زمانی که بازه کد ای که فراخوانی اش
کرده منتظر می مونه، اصولا این فرمی که فراخوانی شده توسط مشخصه DialogResult مقداری رو بر می گردونه، مثلا DialogResult.OK
اگر نیاز به نوع داده دیگری دارید، از مشخصه Tag استفاده کنید. یعنی در اون فرم در مشخصه Tag بنویسید و در بازگشت f1.Tag را بخوانید.

شرمنده میشه در مورد tag بیشتر توضیح بدین.تا حالا باهاش کار نکردم

the king
سه شنبه 03 مرداد 1391, 23:30 عصر
شرمنده میشه در مورد tag بیشتر توضیح بدین.تا حالا باهاش کار نکردم

Tag یک مشخصه اضافی است، در همه کنترل ها هست.
خودش به تنهایی هیچ وظیفه ای نداره، مقدار پیشفرض اش null است و می توانید داخلش هر مقداری را قرار دهید و هر زمانی
که خواستید بخوانید یا تغییر دهید. هر مقداری قبول می کنه (چون از نوع داده object است) و فلسفه وجودی اش اینه که
مواقعی که برنامه نویس می خواهد برای کنترل هایش یک ویژگی اضافی در نظر بگیرد به سادگی از این مشخصه Tag استفاده کند.

mehran788
چهارشنبه 04 مرداد 1391, 09:43 صبح
من که گفتم که تا حالا با tag کار نکردم اگه میشه یه تکه کدی واسم بذارید تا استفاده از اون رو یاد بگیرم یا حداقل توضیح بدین که چطور باهاش کار کنم.

the king
چهارشنبه 04 مرداد 1391, 16:42 عصر
من که گفتم که تا حالا با tag کار نکردم اگه میشه یه تکه کدی واسم بذارید تا استفاده از اون رو یاد بگیرم یا حداقل توضیح بدین که چطور باهاش کار کنم.

در این مثال پیوستی اون متد ShowForm1 یک مقدار رشته ای رو بر می گردونه که در فرم 1
مشخص میشه و برای واسطه از f1.Tag استفاده شده.
و اگر DialogResult کنسل کرده باشه مقدار null رو بر می گردونه.

90220