-
سوال در مورد دسترسی به یک object خاص
سلام.
چجوری میتونم به یک combobox موجود در فرم دیگر دسترسی داشته باشم.:متفکر:
-
نقل قول: سوال در مورد دسترسی به یک object خاص
کامبو باکس رو Public کن اونجوری میشه
-
نقل قول: سوال در مورد دسترسی به یک object خاص
باید خاصیت modifires اون کنترل رو public کنی
بعد توی فرم های دیگه که می خوای به اون دسترسی داشته باشی ، از اون فرم که یک instance گرفتی بعد می تونی به اون کنترل دسترسی داشته باشی
مثلا اسم فرمت Form1 هست و یک textbox داری که می خوای بهش دسترسی داشته باشی . بعد از اینکه modifires مربوط به textbox رو publicکردی این رو یک جای دیگه تو برنامه که لازم داری اینو مینویسی
Form1 frm = new Form1();
frm.textbox.text = "test";
:D همین
-
نقل قول: سوال در مورد دسترسی به یک object خاص
من همین کارو کردم ولی جواب نمیده خاصیت modifieمربوط به comboرو به حالت public درآوردم
form frm=new frmstatus();
ولی وقتی مینویسم frm. نام como که تو فرم status هست نمایش داده نمیشه.
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
mmbarname
من همین کارو کردم ولی جواب نمیده خاصیت modifieمربوط به comboرو به حالت public درآوردم
form frm=new frmstatus();
ولی وقتی مینویسم frm. نام como که تو فرم status هست نمایش داده نمیشه.
نام فرمی که اینجا نوشتین غلطه
frmstatus F = NEW frmstatus();
-
نقل قول: سوال در مورد دسترسی به یک object خاص
درست شد در این صورت فقط میشه اون object رو مقدار دهی کرد من میخوام به مقداره درون combo دسترسی پیدا کنم که نمیشه.
-
نقل قول: سوال در مورد دسترسی به یک object خاص
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
mmbarname
کسی نمیدونه؟
به نظر من کدهای مربوط به combo را بگذارید تا زودتر به نتیجه برسید
و اگر ایرادی در کدهای شما باشه دوستان متوجه اون می شوند و شما را مطلع می سازند
-
نقل قول: سوال در مورد دسترسی به یک object خاص
من در form1 به combo یک مقدار میدم ودر form2 میخوام اون مقدارو نشون بدم
FrmStatus frm = new FrmStatus();
MessageBox.Show(frm.cmbDriver.Text);
-
نقل قول: سوال در مورد دسترسی به یک object خاص
شما به راحتی با دونستن نام شی مورد نظر می تونید بهش دسترسی داشته باشید بدون اینکه پابلیکش کنید
Form2 frm2 = new Form2();
(frm2.Controls["comboBox1"] as ComboBox).Text="Test";
(frm2.Controls["comboBox1"] as ComboBox).SelectedItem = (frm2.Controls["comboBox1"] as ComboBox).Items[2];
frm2.ShowDialog();
-
نقل قول: سوال در مورد دسترسی به یک object خاص
من هنوز نتونستم
تو کمبو فرم1 10 تا اسم وجود داره میخوام با باز کردن فرم 2 مقدار انتخاب شده در کمبو فرم1 رو نمایش بدم .در فرم 2 نمایش بدم:گریه:
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
nilmil_nil
کامبو باکس رو Public کن اونجوری میشه
چرا public ؟
نقل قول:
نوشته شده توسط
majidrezaei2007
باید خاصیت modifires اون کنترل رو public کنی
بعد توی فرم های دیگه که می خوای به اون دسترسی داشته باشی ، از اون فرم که یک instance گرفتی بعد می تونی به اون کنترل دسترسی داشته باشی
مثلا اسم فرمت Form1 هست و یک textbox داری که می خوای بهش دسترسی داشته باشی . بعد از اینکه modifires مربوط به textbox رو publicکردی این رو یک جای دیگه تو برنامه که لازم داری اینو مینویسی
Form1 frm = new Form1();
frm.textbox.text = "test";
:D همین
چرا public ؟
نقل قول:
نوشته شده توسط
wolf_majid
شما به راحتی با دونستن نام شی مورد نظر می تونید بهش دسترسی داشته باشید بدون اینکه پابلیکش کنید
Form2 frm2 = new Form2();
(frm2.Controls["comboBox1"] as ComboBox).Text="Test";
(frm2.Controls["comboBox1"] as ComboBox).SelectedItem = (frm2.Controls["comboBox1"] as ComboBox).Items[2];
frm2.ShowDialog();
اگر فرم ۲ از قبل باز بوده باشه چی؟
نقل قول:
نوشته شده توسط
mmbarname
من هنوز نتونستم
تو کمبو فرم1 10 تا اسم وجود داره میخوام با باز کردن فرم 2 مقدار انتخاب شده در کمبو فرم1 رو نمایش بدم .در فرم 2 نمایش بدم:گریه:
چرا قبل از ایجاد این تاپیک جستجو نکردید؟
-
نقل قول: سوال در مورد دسترسی به یک object خاص
سلام دوست عزیز
فرض کن شما تو فرم 1 یک CombpBox داری و می خوای با زدن Button اطلاعاتش ریخته بشه داخل CombpBoxای که در فرم 2 هستش
ابتدا در فرم 2 اینو بنویس
public Form2(string[] Text)
{
InitializeComponent();
comboBox1.Items.AddRange(Text);
}
حالا در فرم 1 بنویس
private void button1_Click(object sender, EventArgs e)
{
string[] arrcom =new string[comboBox1.Items.Count];
for (int i = 0; i < comboBox1.Items.Count; i++)
{
arrcom[i] = comboBox1.Items[i].ToString();
}
Form2 f2 = new Form2(arrcom);
f2.Show();
}
موفق باشی.
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
اگر فرم ۲ از قبل باز بوده باشه چی؟
:لبخند:
حالا درست شد ؟
Form2 frm2 = new Form2();
frm2.Show();
foreach (Form frm in Application.OpenForms)
{
if (frm is Form2)
(frm).Controls["comboBox1"].Text = ":D";
}
فکر کنم بهترین روش همون ارسال رخداد باشه , درسته ؟
-
نقل قول: سوال در مورد دسترسی به یک object خاص
(Application.OpenForms["yourOpenFormName"] as YourOpenFormClassName).Controls["YourComboboxName"] as ComboBox
با این فرض که اسم کلاس فرم دوم YourOpenFormClassName و مقدار Name اش YourOpenFormName است.
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
F.zeinali
سلام دوست عزیز
فرض کن شما تو فرم 1 یک CombpBox داری و می خوای با زدن Button اطلاعاتش ریخته بشه داخل CombpBoxای که در فرم 2 هستش
ابتدا در فرم 2 اینو بنویس
public Form2(string[] Text)
{
InitializeComponent();
comboBox1.Items.AddRange(Text);
}
حالا در فرم 1 بنویس
private void button1_Click(object sender, EventArgs e)
{
string[] arrcom =new string[comboBox1.Items.Count];
for (int i = 0; i < comboBox1.Items.Count; i++)
{
arrcom[i] = comboBox1.Items[i].ToString();
}
Form2 f2 = new Form2(arrcom);
f2.Show();
}
موفق باشی.
این روش شما درسته ولی آیا به نظرتون محدودیت ایجاد نمی کنه؟
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
Amir Oveisi
(Application.OpenForms["yourOpenFormName"] as YourOpenFormClassName).Controls["YourComboboxName"] as ComboBox
با این فرض که اسم کلاس فرم دوم YourOpenFormClassName و مقدار Name اش YourOpenFormName است.
این رو تست کرده بودم . فقط فرم اول باز شده از نوع فرم2 رو مقدارش را تغییر میده
تست کنید
Form2 frm2 = new Form2();
frm2.Name = "frmTest";
frm2.Show();
((Application.OpenForms["frmTest"] as Form2).Controls["comboBox1"] as ComboBox).Text = ":d";
البته من از روش delegate و event استفاده می کنم
-
نقل قول: سوال در مورد دسترسی به یک object خاص
روش مورد استفاده من برای انجام چنین کاری :
1- تعریف کلاس زیر :
public class MoveObjectEventArgs : EventArgs
{
/// <summary>
///
/// </summary>
/// <param name="obj">موضوع ارسالی</param>
public MoveObjectEventArgs(object obj)
{
_object = obj;
}
/// <summary>
/// شی مورد انتقال
/// </summary>
private object _object;
/// <summary>
/// شی ذخیره شده را بر می گرداند
/// </summary>
public object GetObject
{
get { return _object; }
}
}
2- تعریف یک رخداد و صدا زدن آن در فرم فرستنده :
public delegate void _SendObject(object sender, MoveObjectEventArgs e);
public event _SendObject SendObject;
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Name = "frmTest";
if (SendObject != null)
SendObject(this, new MoveObjectEventArgs(":D"));
frm2.Show();
3- انجام تغییرات در فرم گیرنده :
public Form2()
{
InitializeComponent();
(Application.OpenForms["Form1"] as Form1).SendObject += getObject;
}
private void getObject(object sender, MoveObjectEventArgs e)
{
comboBox1.Text = (e.GetObject as string);
}
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
wolf_majid
این رو تست کرده بودم . فقط فرم اول باز شده از نوع فرم2 رو مقدارش را تغییر میده
تست کنید
Form2 frm2 = new Form2();
frm2.Name = "frmTest";
frm2.Show();
((Application.OpenForms["frmTest"] as Form2).Controls["comboBox1"] as ComboBox).Text = ":d";
البته من از روش delegate و event استفاده می کنم
کلا نگرفتم منظورتونو
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
wolf_majid
روش مورد استفاده من برای انجام چنین کاری :
1- تعریف کلاس زیر :
public class MoveObjectEventArgs : EventArgs
{
/// <summary>
///
/// </summary>
/// <param name="obj">موضوع ارسالی</param>
public MoveObjectEventArgs(object obj)
{
_object = obj;
}
/// <summary>
/// شی مورد انتقال
/// </summary>
private object _object;
/// <summary>
/// شی ذخیره شده را بر می گرداند
/// </summary>
public object GetObject
{
get { return _object; }
}
}
2- تعریف یک رخداد و صدا زدن آن در فرم فرستنده :
public delegate void _SendObject(object sender, MoveObjectEventArgs e);
public event _SendObject SendObject;
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Name = "frmTest";
if (SendObject != null)
SendObject(this, new MoveObjectEventArgs(":D"));
frm2.Show();
3- انجام تغییرات در فرم گیرنده :
public Form2()
{
InitializeComponent();
(Application.OpenForms["Form1"] as Form1).SendObject += getObject;
}
private void getObject(object sender, MoveObjectEventArgs e)
{
comboBox1.Text = (e.GetObject as string);
}
این روش شما هنوز مشکل این که اگر فرم هدف در حال حاضر باز باشه رو حل نکرده. در ضمن این روش به نظر شما چه مزیتی نسبت به ارسال داده از طریق سازنده داره که در پست های قبلی ارسال شده بود؟
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
Amir Oveisi
این روش شما درسته ولی آیا به نظرتون محدودیت ایجاد نمی کنه؟
سلام
من اینجا یه constructor ایجاد کردم و فکر نمی کنم محدودیت ایجاد بکنه!!من می تونم به هر تعداد که لازم بود constructor بسازم و OverLoadهای Form رو بیشتر کنم.
آیا به نظر شما این محدودیت هستش؟؟
خوشحال میشم نظرتون رو بدونم.
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
Amir Oveisi
کلا نگرفتم منظورتونو
اگر بیش از یک نمونه از یک فرم بسازید با روشی که شما گفتید فقط نمونه اول مقداردهی میشه
-
نقل قول: سوال در مورد دسترسی به یک object خاص
محدودیت اول: حتما باید یک instance جدید از فرم مورد نظر بسازید تا بتونین داده مورد نظرتون رو ارسال کنید بهش. اگر قبلا یک instance از فرم مورد نظر وجود داشته باشه آیا بدون اینکه یک instance جدید ازش بسازید میتونین از این روش استفاده کنید؟
محدودیت دوم: آیا برای ارسال هر نوع داده ای قراره یک overload جدا برای سازنده ایجاد بشه؟
محدودیت سوم: آیا برای ارسال داده به هر کنترل در فرم مقصد باید یک overload جدید برای سازنده ایجاد بشه؟
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
Amir Oveisi
این روش شما هنوز مشکل این که اگر فرم هدف در حال حاضر باز باشه رو حل نکرده. در ضمن این روش به نظر شما چه مزیتی نسبت به ارسال داده از طریق سازنده داره که در پست های قبلی ارسال شده بود؟
حالا من منظور شما رو درست نگرفتم :لبخند:
نقل قول:
این روش شما هنوز مشکل این که اگر فرم هدف در حال حاضر باز باشه رو حل نکرده
یعنی چی؟
اصلا" تستش کردید ؟
هر تعداد که میخواد از فرم هدف باز باشه بازم جواب میده ( تست کردم )
نقل قول:
در ضمن این روش به نظر شما چه مزیتی نسبت به ارسال داده از طریق سازنده داره که در پست های قبلی ارسال شده بود؟
فکر کنم اگر تستش کنید متوجه بشید
ببینید تا جایی که من متوجه شدم توی حالت ارسال داده باید چک می کردیم که آیا داده ارسال شده یا خیر , فرستنده و گیرنده کدومند که توی حالت پویا یک کمی سخت میشد
البته من هم تازه از این روش استفاده می کنم ولی به نظرم خیلی قدرت مانورش به روش های دیگه بیشتره مثل همین که میدونیم فرستنده داده کدوم شی ئه
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
wolf_majid
اگر بیش از یک نمونه از یک فرم بسازید با روشی که شما گفتید فقط نمونه اول مقداردهی میشه
یک سناریو بگید که توش نیاز باشه از یک فرم دو تا instance وجود داشته باشه در یک لحظه
-
نقل قول: سوال در مورد دسترسی به یک object خاص
نقل قول:
نوشته شده توسط
Amir Oveisi
یک سناریو بگید که توش نیاز باشه از یک فرم دو تا instance وجود داشته باشه در یک لحظه
من منظور شما رو از "اگر فرم ۲ از قبل باز بوده باشه چی؟" بد گرفتم
حق با شماست