PDA

View Full Version : سوال: استفاده از الگوي سينگلتون و فراخواني توابع فرم دوم



programer1389
چهارشنبه 25 تیر 1393, 13:07 عصر
1 فرم شماره 2 را ميخواهم فقط يک نمونه ازش داشته باشم با سينگلتون اين کار را کردم
2 ميخواهم يکي از توابع فرم دوم را در فرم اول صدا بزنم با delegate اين کار را کردم
حالا وقتي ميخواهم مراحل 1و 2 را باهم داشته باشم يک خطا در يافت ميکنم لطفا بگيد چکار کنم اين هم کد بنده ممنون هم پروژه و هم کد ها را گذاشتم

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace delegate1
{
public delegate void mydelegate(int x, int y);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form f2 = Form2.get_instance();
f2.Show();
mydelegate d =//new mydelegate(f2.get_result)+
new mydelegate(sum)+
new mydelegate(sub)+sum;

d(Convert.ToInt16(textBox1.Text), Convert.ToInt16(textBox2.Text));
}
private void sum(int x, int y)
{
label1.Text = (x + y).ToString();
}
private void sub(int x, int y)
{
label2.Text = (x - y).ToString();
}
}
}



و فرم دوم

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace delegate1
{

public partial class Form2 : Form
{
public static Form2 sform;
public static Form2 get_instance()
{
if (sform == null)
{
sform = new Form2();
}
return sform;
}
public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{

}
public void get_result(int x, int y)
{
MessageBox.Show("in form2");
textBox1.Text = (x+y).ToString();
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{

}
}
}

hamid_hr
چهارشنبه 25 تیر 1393, 13:24 عصر
خطاش چی هست؟
مربوط به کدوم خط هست؟

programer1389
چهارشنبه 25 تیر 1393, 13:44 عصر
خطاش چی هست؟
مربوط به کدوم خط هست؟


mydelegate d =//new mydelegate(f2.get_result)+ new mydelegate(sum)+
new mydelegate(sub)+sum;
اگر قسمت کامنت رو بردارم خطا ميگيره خط اول کد بالا

مهرداد صفا
چهارشنبه 25 تیر 1393, 17:54 عصر
سلام.
یا f2 رو از نوع Form2 تعریف کنید و یا هنگام دسترسی unbox کنید:


((Form2)f2).getResult....

programer1389
پنج شنبه 26 تیر 1393, 07:50 صبح
سلام.
یا f2 رو از نوع Form2 تعریف کنید و یا هنگام دسترسی unbox کنید:


((Form2)f2).getResult....

سلام
فکر کنم تو سينگلتون نبايد سازنده رو public تعريف کرد و بايد private باشه اگه اين کار رو بکنم مثل کاري که الان تو پروژه انجام دادم مشکل حل ميشه ولي من ميخوام اگه بشه هم تو فرم دوم سازنده فرم را private کنم و هم تو فرم اول از unbox استفاده کنم اما نميتونم اگه ميشه يک نگاهي به پروژه بکنيد ممنون خواهم شد.

programer1389
یک شنبه 29 تیر 1393, 09:34 صبح
لطفا بيشتر راهنمايي کنيد