PDA

View Full Version : دسترسی به کنترل های فرم 1 از طریق فرم 2



miladmki
چهارشنبه 01 اردیبهشت 1395, 18:05 عصر
با سلام و خسته نباشید...
دوستان من این کد رو درون یک دکمه نوشتم تا متنی را در textBox جستجو کرده و آن را نمایان کند...
حال میخواهم این کد هارو درون فرم 2 بنویسم و از طریق فرم 2 این کار انجام شود...
لطفا طریقه دسترسی به کنترل های فرم 1 از طریق فرم 2 را توضیح دهید...ممنون

if (textBox2.Text != "")
{
int n;
n = textBox1.Text.IndexOf(textBox2.Text, i);
if (n >= 0)
{
textBox1.Focus();
textBox1.SelectionStart = textBox1.Text.IndexOf(textBox2.Text, i);
textBox1.SelectionLength = textBox2.TextLength;
i = textBox1.Text.IndexOf(textBox2.Text, i) + 1;
}
else
{
MessageBox.Show("Not Found");
i = 0;
textBox1.SelectionLength = 0;
textBox1.SelectionStart = textBox1.Text.Length;
}

}
متغیر i هم بیرون تعریف شده با مقدار اولیه 0

csharp.net
پنج شنبه 02 اردیبهشت 1395, 02:25 صبح
این مقاله از سایت w3-farsi.com (http://www.w3-farsi.com/%D8%B1%D9%88%D8%B4-%D9%87%D8%A7%DB%8C-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%87%D8%A7%DB%8C-%DB%8C%DA%A9-%D9%81%D8%B1%D9%85-%D8%AF%D8%B1-%D9%81%D8%B1/) به دردتون میخوره

یک از روش های دسترسی به کنترل های یک فرم در داخل فرم دیگر ایجاد یک خصوصیت از نوع کنترلی است که می خواهیم به ان دسترسی داشته باشیم. بهتر است که یک مثال بزنیم. یک برنامه ویندوزی ایجاد کرده و یک فرم دیگر به آن اضافه کنید. به فرم اول یک کنترل button به فرم دوم یک کنترل textbox اضافه کنید. حال فرض کنید که می خواهید در داخل فرم اول به این کنترل textbox فرم دوم دسترسی داشته باشید و مقادیری به آن ارسال کنید. برای این منظور ابتدا یک خاصیت از نوع رشته (چون textbox مقادیر رشته را قبول می کند) در فرم دوم ایجاد کنید.


public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

public string Text
{
get { return this.textBox1.Text; }
set { this.textBox1.Text = value; }
}
}
سپس بر روی دکمه در فرم اول دو بار کلیک کرده و کدهای زیر را در داخل آن بنویسید :

private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Text = "Hello, world.";
frm.ShowDialog();
}

برنامه را اجرا کرده و بر روی دکمه کلیک کنید :

http://www.w3-farsi.com/wp-content/uploads/2014/08/form-to-another-form.jpg

مشاهده می کنید که مقدار “Hello World” به کنترل textbox ارسال می شود.

یک روش دیگر این است که خاصیت modifier کنترلی که قرار است به آن دسترسی داشته باشیم (textBox) را برابر Public قرار داده و در رویداد کلیک دکمه در فرم اول کد زیر را بنویسید :

private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
Control[] Control = frm.Controls.Find("textBox1", false);
if (Control.Length > 0)
{
TextBox textBox = (TextBox)Control[0];
textBox.Text = "www.w3-farsi.com";
}

frm.Show();
}
همانطور که در کد بالا مشاهده می کنید، نام کنترلی را که می خواهیم به آن دسترسی داشته باشیم را به متد find ارسال می کنیم. برنامه را اجرا و نتیجه را مشاهده کنید :
http://www.w3-farsi.com/wp-content/uploads/2014/08/form-to-another-form-1.jpg

miladmki
پنج شنبه 02 اردیبهشت 1395, 12:08 عصر
مرسی...
ولی همه اینایی که شما گفتی از فرم 1 به 2 بود...
از فرم 2 به 1 قضیه فرق می کنه دیگه نمیشه بنویسی Form1 frm = new Form1();
چون که فرم جدید نمی خوام بسازم می خوام عملیات رو روی فرم جاری انجام بدم...
دوستان اگه راه حل دیگه ای میدونند راهنمایی کنند لطفا...

khokhan
پنج شنبه 02 اردیبهشت 1395, 12:53 عصر
با سلام و خسته نباشید...
دوستان من این کد رو درون یک دکمه نوشتم تا متنی را در textBox جستجو کرده و آن را نمایان کند...
حال میخواهم این کد هارو درون فرم 2 بنویسم و از طریق فرم 2 این کار انجام شود...
لطفا طریقه دسترسی به کنترل های فرم 1 از طریق فرم 2 را توضیح دهید...ممنون

if (textBox2.Text != "")
{
int n;
n = textBox1.Text.IndexOf(textBox2.Text, i);
if (n >= 0)
{
textBox1.Focus();
textBox1.SelectionStart = textBox1.Text.IndexOf(textBox2.Text, i);
textBox1.SelectionLength = textBox2.TextLength;
i = textBox1.Text.IndexOf(textBox2.Text, i) + 1;
}
else
{
MessageBox.Show("Not Found");
i = 0;
textBox1.SelectionLength = 0;
textBox1.SelectionStart = textBox1.Text.Length;
}

}
متغیر i هم بیرون تعریف شده با مقدار اولیه 0

وقتی می گی از فرم 2 به کنترل داخل فرم 1 دسترسی داشته باشم پس با این حساب وقتی فرم 2 باز باشه منطقا قبل از اون فرم 1 باز شده پس نتیجه این می شه :

Form1 ff =(Form1) Application.OpenForms["form1"];
ff.Controls["textBox1"].Text=this.textBox1.Text

در ضمن تغییر در modifier ناشیانه طریق برای دسترسی هست و عواقب داره هرگز این کارو نکن :لبخند:

miladmki
جمعه 03 اردیبهشت 1395, 10:07 صبح
از این روشی که شما گفتین قبلا رفته بودم ...
ولی فقط میشه Text رو تغییر بدی ...
نمیشه SelectionStart و SelectionLength رو تعیین کنی...
لطفا راه دیگه ای اگه کسی میدونه بگه

حسین.کاظمی
جمعه 03 اردیبهشت 1395, 14:46 عصر
سلام
یه راه دیگه برای دسترسی به مقادیر از یک فرم به فرم دیگه تعریف کلاس و درون کلاسم تعریف یک متغییر از هرنوعی که بسته به کارت باشه ازنوع public static بساز و در هرکجای برنامه ات خاستی صداش کن یا مقدارش و تغیر بده.:لبخند:

miladmki
جمعه 03 اردیبهشت 1395, 19:24 عصر
سلام
یه راه دیگه برای دسترسی به مقادیر از یک فرم به فرم دیگه تعریف کلاس و درون کلاسم تعریف یک متغییر از هرنوعی که بسته به کارت باشه ازنوع public static بساز و در هرکجای برنامه ات خاستی صداش کن یا مقدارش و تغیر بده.:لبخند:
من نمی خوام به تکس باکس فرم ۱ متن بدم ...
می خوام فقط قسمتی از متن رو highlight کنم...