PDA

View Full Version : کلیک کردن در فرم و انجام رویداد کلیک در فرم دیگر



cerezaei65
چهارشنبه 27 دی 1391, 10:58 صبح
با سلام
دو تا فرم دارم، توی هردوتاشون یک باتم هست
چجوری میشه از داخل فرم اول با زدن کلیک ، رویداد کلیک کردن دکمه در فرم دوم رو فراخوانی کنه
هر دوتای فرم ها باز هستن
راستی نمیشه اصن public static تعریفش کرد، چون متغییر محلی داره:گریه:

saied_hacker
چهارشنبه 27 دی 1391, 11:21 صبح
تکراریه....

توی فرم 2 رویداد کلیک رو public کن بعد از داخل فرم 1 فراخونیش کن.
Form2 s = new Form2();
s.Show();
s.button1_Click(sender, e);

cerezaei65
چهارشنبه 27 دی 1391, 11:37 صبح
ممنون
اما نمیتونم از فرم یه شی جدید بسازم!!!
اینو خوب دیده بودم و میدونستم
بازم ممنون
راهی نیست بدون ساخت فرم اونو فراخوانی کنیم؟

RED-C0DE
چهارشنبه 27 دی 1391, 11:38 صبح
چ کاری می خواین انجام بدین؟ اگه بخواین اصولی کار کنین باید سناریوتون رو بررسی کنید مجددا..

فرمهاتون چجوری باز هستن؟ یکی بصورت Modal روی یکی دیگه یا هر 2 جداگانه باز شدن؟

saied_hacker
چهارشنبه 27 دی 1391, 11:48 صبح
شما وقتی نمی خای نمونه سازی کنی چطوری میخای بهش دسترسی داشته باشی ( میگی static هم نباشه )؟؟؟؟

RED-C0DE
چهارشنبه 27 دی 1391, 12:02 عصر
می تونی یک کلاس جداگانه داشته باشی اونجا event رو تعریف کنی. در فرم 1 وقتی کلید مورد نظر کلیک خورد، رویداد رو در کلاس (ک می تونه static هم باشه) fire کنید و در فرم 2 کافیه اون رویداد رو هندل کنید و نیازی ب ساخت شی هم نیست.

public static class MyTestClass
{
public static event EventHandler Form1Button1Clicked;

public static void OnForm1Button1Clicked(EventArgs pEventArgs)
{
var handler = Form1Button1Clicked;
if (handler != null) handler(null, pEventArgs);
}
}

//

حالا در فرم1 ک کلیدتون هست بعد از اینکه کارتون رو انجام دادین رویداد بالا رو هم fire کنید:

public partial class Form1:Form
{
// ...
private void MyButton1_Clicked(object sender ,EventArgs e)
{
//...
MyTestClass.OnForm1Button1Clicked(e);
}

}

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

public partial class Form2:Form
{
// ...
public Form2()
{
InitializeComponents();

MyTestClass.Form1Button1Clicked += DoMyJobBecauseForm1Button1Clicked;
}

private void DoMyJobBecauseForm1Button1Clicked(object sender, EventArgs e)
{
// ur job here...
}
}
ولی اصلا کار جالبی نیست این کارا! روم ب دیوار x_x

cerezaei65
چهارشنبه 27 دی 1391, 12:06 عصر
ممنون
فرم دوم به صورت فرزند باز میشه!
توی فرم دوم کار اسکن انجام میشه، و البته نمیشه عکسشو دریافت کرد، یه کد آمادست، و کاربر باید چک کنه خوب اسکن شده یا نه بعد بر اساس عکسی که اسکن کرده، نوعشو انتخاب کنه!! این مرحله توی فرم اوله! که به صورت parent باز هست، یه کلیک باید کنیم که هم نوعشو از فرم پدر بگیره و عکسو از فرم فرزند!!!!!

hamedAdmin
پنج شنبه 28 دی 1391, 08:33 صبح
سلام
اینم یه روش:
شما یه فرم دارید به نام form1 که از روی اون فرم دوم به نام form2 رو showdialog میکنی
form1 یه کلید داره به نام Button1 و form2 یه کلید بنام Buttent2
شما میخوای وقتی از فرم اول فرم دوم رو باز میکنی و کلید button2 رو میزنی دقیقا عملی که button1 رو فرم اول انجام میده رو دوباره انجام بده.
اگه تا اینجا درسته پس توی form1 و دقیقا قبل از showdialog کردن فرم دومت کافیه این کدها رو بنویسی:

RoutedEventArgs e1=new RoutedEventArgs();
Form2 f2 = new Form2();
f2.button2.Click += delegate { button1_Click(button2, e1); };
f2.ShowDialog();

و البته برای رویداد کلیک button1 هم این کلاس رو دایم:


private void button2_Click(object sender, RoutedEventArgs e)
{
//OTHER CODES
}

حتما اگه دقت کنی مشکلت اینجوری حل میشه.
که البته کاری اصولی نیست و همونطور که دوستمون red-code گفت:
اگه بخواین اصولی کار کنین باید سناریوتون رو بررسی کنید مجددا..