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

نام تاپیک: تغییر عنوان فرم 1 از طریق فرم 2

  1. #1
    کاربر دائمی آواتار hamide_kh
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    روبروی مانیتور
    پست
    202

    تغییر عنوان فرم 1 از طریق فرم 2

    با عرض سلام خدمت دوستان
    من در برنامه هام 2 تا فرم دارم در فرم دومم می خوام با زدن یک دکمه caption فرم اولم تغییر کنه
    برای این کار کد زیر را نوشتم
    form1 frm=new form1();
    frm.text=Txtbox1.text;
    اما این کد عمل نمی کنه
    البته اگه کد زیر را بنویسم و یک نمونه جدید از فرم یک بسازم عمل میکنه
    frm.visible=false;
    frm.visible=true;
    اما من می خوام همون فرم قبلی را تغییر بدم
    اگه ممکنه راهنماییم کنید

  2. #2
    کاربر دائمی آواتار ASKaffash
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    2,427

    نقل قول: تغییر عنوان فرم 1 از طریق فرم 2

    سلام
    اگر در مثال پائین امنیت در فرم 9 برایتان مهم نیست اینطوری عمل کنید :
    در فرم 9 :

    new Form10(this).Show();

    در فرم 10 :

    public partial class Form10 : Form
    {
    public Form9 F9 { set; get; }
    public Form10(Form9 F9)
    {
    InitializeComponent();
    this.F9 = F9;
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    this.F9.Text = this.textBox1.Text;
    }
    }

  3. #3
    کاربر دائمی آواتار hamide_kh
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    روبروی مانیتور
    پست
    202

    نقل قول: تغییر عنوان فرم 1 از طریق فرم 2

    با عرض سلام و تشکر از پاسختون
    سلام
    اگر در مثال پائین امنیت در فرم 9 برایتان مهم نیست اینطوری عمل کنید :
    2 تا سوال برام پیش اومد:
    1-میشه در باره اینکه امنیت برام مهم نیست بیشتر توضیح بدید
    2-اگه ممکنه یکم در مورد کد هم بهم توضیح بدید

  4. #4
    کاربر دائمی آواتار ASKaffash
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    2,427

    نقل قول: تغییر عنوان فرم 1 از طریق فرم 2

    سلام
    اشکال این روش این است که فرم 10 کاملا به تمام اشیای درون فرم 9 دسترسی دارد
    در این برنامه برای نمونه ساخته شده در فرم 10 ریفرنس فرم 9 ارسال می شود (در یک خاصیت از نوع فرم 9) و به این روش مدیریت فرم 9 در اختیار فرم 10 نیز قرار می گیرد

  5. #5
    VIP آواتار Amir Oveisi
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    هر جا که حال کنم - فعلا یزد
    پست
    2,604

    نقل قول: تغییر عنوان فرم 1 از طریق فرم 2

    نقل قول نوشته شده توسط hamide_kh مشاهده تاپیک
    با عرض سلام خدمت دوستان
    من در برنامه هام 2 تا فرم دارم در فرم دومم می خوام با زدن یک دکمه caption فرم اولم تغییر کنه
    برای این کار کد زیر را نوشتم
    form1 frm=new form1();
    frm.text=Txtbox1.text;
    اما این کد عمل نمی کنه
    البته اگه کد زیر را بنویسم و یک نمونه جدید از فرم یک بسازم عمل میکنه
    frm.visible=false;
    frm.visible=true;
    اما من می خوام همون فرم قبلی را تغییر بدم
    اگه ممکنه راهنماییم کنید
    دوست عزیز این بحث ده ها بار در سایت مطرح شده که چطور از طریق یک فرم به کنترل های فرم دیگه دسترسی داشته باشیم و یا مقادیر فیلدهایی از فرم دیگه رو تغییر بدیم و از این چیزا. و شما اگر جستجو می کردید قبل از ایجاد تاپیک، مطمئنا به جواب می رسیدید.
    و اما در مورد سوالتون:
    هر فرمی وفتی show میشه و روی صفحه نشون داده میشه، در وافع یک شی هست از نوع اون فرم که new شده و الان در حافظه قرار داره. فرض کنید که شما دو تا فرم رو show کردین، form1 از نوع Form1 و form2 از نوع Form2. پس الان این دو تا object در حافظه قرار دارند. شما اگر بخواهید که از فرم مثلا دوم به text (یا به قول شما caption - اگه اشتباه نکنم تو VB میگفتن caption) فرم اول دسترسی داشته باشید باید به یک نحوی به همون شی موجود در حافظه دسترسی پیدا کنید. کد هایی که شما نوشتید میاد و یک شی جدید از فرم اول می سازه و text اونو تغییر میده واسه همین چون شی قبلی که تو حافظه بود تغییری نکرده، پس فرم یک شما هم تغییری نمیکنه.
    برای حل این مسئله دوستان روش های مختلفی رو تو پست های مختلف پیشنهاد دادن که متاسفانه خیلی هاشون روش های درستی نیستند.
    بهترین راه و درست ترین راه برای انجام کاری که شما میخواید، استفاده از یک property هست به نام OpenForms در کلاس Application. این property به عنوان کلید یک int می گیره. مثلا اگر بهش 0 بدید یعنی اولین فرمی که باز شده رو برگردون. (دقت کنید که فرم ها به ترتیب show شدن میرن داخل این OpenForms ، درست مثل یک صف).
    یک حالت دیگه از property هم یک string به عنوان کلید می گیره و فرمی رو که نام اون با کلید برابر هست رو از میان فرم های باز، بر میگردونه.
    به این مثال دقت کنید:
    در فرم دوم می نویسیم:

    Application.OpenForms[0].Text = "hello";


    کد بالا اولین فرم باز برنامه رو برمی گردونه (که همون فرم 1 ما میشه) و ما مقدار Text اش رو تغییر میدیم.
    با فرض اینکه مقدار Name فرم 1 ما form1 باشه، کد بالا رو این شکلی هم میشه نوشت:
    Application.OpenForms["form1"].Text = "hello";


    نکته:
    Application.OpenForms یک شی از نوع کلاس پایه Form بر می گردونه. مثلا در مثال بالا که فرم صفرام همون فرم 1 ما هست، اما نوع داده ای که برگشت داده میشه از نوع فرم1 ما نیست بلکه از نوع کلاس پایه Form هست. اگر بخواهید که داده برگشت داده شده از نوه داده فرم خودتان باشد (در اینجا از نوع Form1) باید از Catsting استفاده کنید. به کد زیر دقت کنید:
    (Application.OpenForms["form1"] as Form1).Controls["textbox1"] .Text = "some new text";


    در این کد ما فرم برگشت داده شده رو تبدیل کردیم به Form1 (چون در واقع همون فرم 1 بود اما نوع داده اش Form1 نبود و ما درستش کردیم) و از اون استفاده کردیم.
    دقت کنید در این کد برای دسترسی به کنترل textbox داخل فرم1، از یک property به اسم Controls استفاده کردیم که طرز کار با آن دقیقا مانند OpenForms هست و با دادن اسم یک کنترل، اونو بهمون بر میگردونه. بدون این روش ما نمیتونیم به کنترل های دسترسی داشته باشیم چون private هستن و غیرقابل دسترسی مستقیم.
    Controls هم نوغ داده برگشتیش از نوع خود اون کنترل نیست بلکه از نوع کلاس پایه Control هست. مثلا تو کد ما، textbox رو خواستیم بگیریم، درسته textbox رو بهمون میده اما نوع داده اش TextBox نیست و Control (که TextBox از اون ارث برده) هست. اگر لازم بود که نوع داده برگشتیمون TextBox باشه باید مثل فرم ها از Casting استفاده کنیم.

    امیدوارم توضیحات مفید واقغ بشن.
    موفق باشید

  6. #6
    کاربر دائمی
    تاریخ عضویت
    تیر 1388
    محل زندگی
    نا کجا باد
    پست
    813

    نقل قول: تغییر عنوان فرم 1 از طریق فرم 2

    با سلام به دوستان
    Application.OpenForms["form1"].Text = "hello";
    از نمونه کد بالا برای تغییر نام فرم 1 از طریق فرم 2 استفاده کردم و به درستی جواب گرفتم ولی زمانی که می خواهم به شی از فرم1 مثل button دسترسی پیدا کنم با کد زیر
     (Application.OpenForms["client"] as client).Controls["btn_about"].Enabled = true;

    این خطا را می دهد و
    Object reference not set to an instance of an object.
    (نمونه از شی نمی تواند بروی شی مرجع تنظیم کند )
    چرا؟؟؟؟؟؟؟؟؟؟؟

  7. #7

  8. #8
    کاربر دائمی
    تاریخ عضویت
    تیر 1388
    محل زندگی
    نا کجا باد
    پست
    813

    نقل قول: تغییر عنوان فرم 1 از طریق فرم 2

    btn_about ای که دارید new شده آیا؟
    بیشتر توضیح دهید منظور شما چیست از new کردن
    مطمئنید که اسمش رو درست نوشتید؟
    بله درست نوشتم مشکلی از این نیست
    در پنجره about خروجی دستوری که در پست قبل نوشتم را برابر null می کنه و همان خطای بالا را می دهد
    چرا؟؟؟؟؟؟؟؟

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

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