نمایش نتایج 1 تا 5 از 5

نام تاپیک: تغییر فرم والد بوسیله فرم فرزند

  1. #1

    تغییر فرم والد بوسیله فرم فرزند

    می خوام با کلیک بر روی دکمه ای که روی فرم فرزند هست BackColor فرم والد رو تغییر بدم
    برای اینکار در فرم 2
    public partial class Form2 : Form
    {
    public Form1 f1
    public Form2()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

    f2.f1=this;
    f1. BackColor=Color.Green;
    }

    اما اجرا نمیشه ...باید چه کار کنم؟

  2. #2
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115
    اگر این کار رو از طریق یک Interface انجام بدید بهتره ( یعنی Abstraction بیشتر رعایت شده )


    public interface IBackColorChanger
    {
    void ChangeBackColod( Color color );
    }

    public class Form1 : System.Windows.Forms.Form, IBackColorChanger
    {
    private System.Windows.Forms.Button button1;
    public void ChangeBackColod(Color color)
    {
    this.BackColor = color;
    }
    private void button1_Click(object sender, System.EventArgs e)
    {
    Form2 frm = new Form2( this );
    frm.ShowDialog();
    }
    }

    public class Form2 : System.Windows.Forms.Form
    {
    public IBackColorChanger _forchange;
    private System.Windows.Forms.Button button1;
    public Form2( IBackColorChanger ForChange ): this()
    {
    this._forchange = ForChange;
    }
    private void button1_Click(object sender, System.EventArgs e)
    {
    _forchange.ChangeBackColod( Color.Blue );
    }
    }


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

  4. #4
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    سن
    44
    پست
    966
    من بطور اتفاقی پیام شما را خواندم شما باید از composit pattern یا همان الگوی مخلوط استفاده کنید همانطوریکه دوست عزیزمون sorrena استفاده کرده البته از interface هم استفاده کرده تا بتونه خصوصیت کلاس پدر را تا حد ممکن بصورت خصوصی نگاه بداره یعنی کاملاً حرفه ای عمل کرده. اما الگوی مخلوط همین رو می که از طریق کلاس فرزند به کلاس پدر دسترسی داشت هرچند بحث encapsulate کمی تحت شعاع قرار می گیره ولی با کمک از یک واسطه گر که همان interface هست کمی کار محکم میشه. راه حل این است که هنگامی که می خواهی کلاس فرزند را در حافظه ایجاد کنی یا به عبارتی new بگیری در سازنده کلاس فرزند constructor ان از کلاس پدر یک نمونه بفرست و در کلاس فرزند ان را تحویل بگیر. منتها در کلاس فرزند تنها به رفتارها و خصوصیات public پدر دسترسی داری اگر بخواهی رفتار یا خصوصیتی را عوض کنی بطوریکه خصوصیات پدر همچنان private بماند باید یا interface تعریف کنی یا از الگوی state یا همان وضعیت که در C#‎ با set , get درست می شود.
    public class Father {
    public Father() {
    Child child = new Child(this);
    }
    public void setChangeColor(int a) {
    this.Color = a;
    }
    }
    public class Child {
    private Father father;
    public Child(Father f) {
    this.father = f;
    }
    private void mouseClicked() {
    father.setChangeColor(5); }
    }

    البته شایان ذکر است که این کدی که من برای شما نوشته ام کد واقعی نیست تلفیقی از کد جاوایی و شبه کد می باشد. مهم این بود که شما با دو الگوی مهم آشنا شدید.
    1 composite pattern
    state Pattern 2
    احیاناً اگر بازهم متوجه نشدید میتونید برای من در قسمت برنامه نویس جاوا یا بصورت خصوص پیغام بگذارید.
    من همانطور که گفتم بصورت اتفاقی از این قسمت گذشتم. ولی فکر کنم با دو مثال کار شما راه بی افتد. معمولاً الگوی composite درThread ها استفاده می شود. خوب برای تمرین بد نیست


  5. #5
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115
    نقل قول نوشته شده توسط Melisa مشاهده تاپیک
    ممنون
    ولی این چیزهایی که شما گفتید هنوز به ما درس ندادن..را ه حل دیگه در حد همین کدی که نوشتم نداره؟



    public class Form1 : System.Windows.Forms.Form
    {
    private System.Windows.Forms.Button button1;
    private void button1_Click(object sender, System.EventArgs e)
    {
    Form2 frm = new Form2( this );
    frm.ShowDialog();
    }
    }

    public class Form2 : System.Windows.Forms.Form
    {
    public Form _forchange;
    private System.Windows.Forms.Button button1;
    public Form2( Form ForChange ): this()
    {
    this._forchange = ForChange;
    }
    private void button1_Click(object sender, System.EventArgs e)
    {
    _forchange.BackColor= Color.Blue ;
    }
    }


تاپیک های مشابه

  1. تغییر ارتفاع lineبا تغییر ارتفاع Textbox در گزارش
    نوشته شده توسط payam59 در بخش Access
    پاسخ: 22
    آخرین پست: یک شنبه 03 شهریور 1387, 15:41 عصر
  2. تغییر اندازه ارتفاع QRShape با تغییر ارتفاع DetailBand
    نوشته شده توسط mojtaba_z در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: پنج شنبه 07 تیر 1386, 07:49 صبح
  3. تغییر Toolbar با تغییر Thems ویندوز XP
    نوشته شده توسط na3er-faraji در بخش VB.NET
    پاسخ: 2
    آخرین پست: پنج شنبه 06 مهر 1385, 12:08 عصر
  4. غیر قابل تغییر کردن فرم about تغییر desktop تو vb
    نوشته شده توسط Payman62 در بخش برنامه نویسی در 6 VB
    پاسخ: 8
    آخرین پست: یک شنبه 31 اردیبهشت 1385, 11:12 صبح
  5. تغییر در PHPbb (تغییرات خیلی کلی)
    نوشته شده توسط nasr در بخش PHP
    پاسخ: 4
    آخرین پست: جمعه 05 فروردین 1384, 12:06 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •