PDA

View Full Version : سوال: اجرای کدهای button یک فرم در فرم دیگر



vb-sosol
دوشنبه 25 اسفند 1393, 19:21 عصر
سلام دوستان
میشه راهنمائی کنید که چطوری میتونم در فرم 2 کدهای که در button فرم1 نوشته شده رو اجرا کنم
در واقع انگار روی button فرم1 کلیک کردم

danialafshari
دوشنبه 25 اسفند 1393, 20:22 عصر
با سلام
سوالتون اصلا واضح نیست
در حالت عادی میشه از sender استفاده کرد
ولی بهتره درباره عملکرد دکمه ای که میخواید روش کلیک کنید کمی توضیح دهید
شاید از راه های بهتری یا در قالب class بشه انجامش داد
موفق باشید

محمد قانعی
دوشنبه 25 اسفند 1393, 23:22 عصر
سلام.
میتونی تمام دستوراتی رو که تو button نوشتی در قسمت زیر بنویسی بعد از class Form1


amespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public void button()
{
//کد های button
}

بعد تو فرم دیگه


form1 f1 = new form1;
f1.button();

این یکی از راها بود .
موفق باشی!

vb-sosol
سه شنبه 26 اسفند 1393, 17:05 عصر
کدهای که توی button نوشتم برای select زدن هست و یک دیتا گریدویو رو پر میکنم
وقتی با کد آقای قانعی نوشتم دیگه گریدویو پر نمیشه!

fool66
سه شنبه 26 اسفند 1393, 17:16 عصر
چرا از کلاس استفاده نمی کنی و هر جا که نیازه تابع رو فرخوانی کن

vb-sosol
سه شنبه 26 اسفند 1393, 17:18 عصر
میشه یه نمونه کد برام بنویسید
که توی کلاس گرید رو با کانکشنی که زدم پر کنم
و نحوه فراخونیش
مرسی

fool66
سه شنبه 26 اسفند 1393, 17:23 عصر
تابع رو بنویسید توی یه کلاس بعد ذخیره کن توی پروژه
بعد برو توی فرم هایی که میخوای تابع رو اجرا کنی new کن کلاستو بعد تابع رو فراخوانی کن

vb-sosol
سه شنبه 26 اسفند 1393, 17:31 عصر
تابع رو بنویسید توی یه کلاس بعد ذخیره کن توی پروژه
بعد برو توی فرم هایی که میخوای تابع رو اجرا کنی new کن کلاستو بعد تابع رو فراخوانی کن

خوب من تا خالا اینجوری کار نکردم
یه نمونه کد اگه میشه بذارید که توی کلاس چطوری کانکشن ایجاد کنم و گریدویو رو پر کنم
و بعدش برای فراخونی تابع چی بنویسم
مرسی

fool66
سه شنبه 26 اسفند 1393, 17:41 عصر
اینم نمونه

vb-sosol
سه شنبه 26 اسفند 1393, 18:51 عصر
ممنون دوست عزیز واقعا لطف کردید
حالا مشکلم این هست که وقتی کلاس رو فراخونی میکنم توی فرم 2 حالا باید گریدویو فرم1 پر بشه ولی این اتفاق نمیوفته
خاصیت modifiers مربوط به گرید هم public کردم

fool66
سه شنبه 26 اسفند 1393, 18:54 عصر
مقدار بازگشتی تابع رو توی یه table بریز بعد اونو انتساب بده به دیتاگرید

vb-sosol
سه شنبه 26 اسفند 1393, 18:59 عصر
یعنی دوباره توی یه جدول جدید Insert کنم؟

fool66
سه شنبه 26 اسفند 1393, 19:01 عصر
تابع select رو بزار تا برات بگم

vb-sosol
سه شنبه 26 اسفند 1393, 19:04 عصر
تابع select رو بزار تا برات بگم

fmMain.dataGridViewPerson.DataSource = shn.connectdb("select * from Person");

fool66
سه شنبه 26 اسفند 1393, 19:30 عصر
class Class1 {
SqlConnection con1 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\bank\BAnbar.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
//////////////////////////////////////////////////
//اتصال به بانک اطلاعاتی
public DataTable connectdb(string cmd)
{
DataTable dt = new DataTable();
dt.Clear();
try
{
SqlDataAdapter da = new SqlDataAdapter(cmd, con1);
da.Fill(dt);
return dt;
}
catch (Exception)
{
MessageBox.Show("خطا در اتصال به بانک اطلاعاتی");
return dt;
}
finally
{
con1.Close();
}
}


public DataTable ChDCus(string code)
{
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Obverse WHERE OID=@p1", con1);
da.SelectCommand.Parameters.Clear();
da.SelectCommand.Parameters.AddWithValue("@p1", code);
DataTable dt = new DataTable();
dt.Clear();
da.Fill(dt);
return dt;
}
}

vb-sosol
سه شنبه 26 اسفند 1393, 19:46 عصر
من چون دارم با اکسس کار میکنم کانکشنم فرق داره
دو خط آخر یعنی da.Fill(dt); نمی دونم چی بایدبنویسم
بعد فک میکنم فرقی نکنه و بازم نشون نده

fool66
سه شنبه 26 اسفند 1393, 19:49 عصر
سورس کاملتو بزار یه نگاهی بهش بندازم

vb-sosol
سه شنبه 26 اسفند 1393, 20:09 عصر
چون سورسم خیلی بود برنامه کوچکی درست کردم که منظورم رو برسونم
اگه روی فرم دوم که اون دکمه گذاشتم کلیک بشه باید اطلاعات در گرید فرم 1 ظاهر بشه
بازم ممنون بابت وقتی که میذارید

fool66
سه شنبه 26 اسفند 1393, 20:26 عصر
این کارایی که گفتم کجاش انجام دادی
سورس خودتو پاک نکردم ببین هرجاش مشکل داشتی بپرس

vb-sosol
سه شنبه 26 اسفند 1393, 20:29 عصر
نه عزیز من نمیخوام گرید در فرم 2 باشه
میخوام در فرم2 مثلا این کد نوشتم

Form1 fmm = new Form1();
fmm.dataGridViewPerson.DataSource = shp.loaddb();

گرید فرم1 پر بشه

fool66
سه شنبه 26 اسفند 1393, 20:45 عصر
خب تو می خوای که اطلاعاتت نشون داده بده یا باید دیتاگرید بزار یا ارسال با پارامتر انجام بدی

vb-sosol
سه شنبه 26 اسفند 1393, 20:49 عصر
خب تو می خوای که اطلاعاتت نشون داده بده یا باید دیتاگرید بزار یا ارسال با پارامتر انجام بدی

دیتاگرید فقط فرم 1 باید پر بشه
چرا با این کد نمیشه اطلاعات رو ارسال کنم؟

Form1 fmm = new Form1();
fmm.dataGridViewPerson.DataSource = shp.loaddb();

محمد قانعی
سه شنبه 26 اسفند 1393, 21:00 عصر
سلام.
من هم مثل شما از فرم2 میام گرید فرم1 رو پر میکنم.
هر کدی رو که قراره گریدت رو پر کنه اینجا بزار .



amespace WindowsFormsApplication1
{
public partial class Form1 : Form
{

public void button()

{
//کد هایی که قراره گریدت رو پر کنه


}





بعدش باید هر جایی که میخواهی گریدت پر بشه مثل رویداد لود فرم1


public void button();


فقط وقتی از یک فرم دیگه خواستی گریدت رو پر کن کد زیر رو بنویس


form1 f1 = new form1;
f1.button();



اگه بازم سئوال در مورد پر شدن گرید از یه فرم دیگه داشتی بپرس اگه بدونم کمکت میکنم.

vb-sosol
سه شنبه 26 اسفند 1393, 21:05 عصر
سلام.
من هم مثل شما از فرم2 میام گرید فرم1 رو پر میکنم.
هر کدی رو که قراره گریدت رو پر کنه اینجا بزار .



amespace WindowsFormsApplication1
{
public partial class Form1 : Form
{

public void button()

{
//کد هایی که قراره گریدت رو پر کنه


}





بعدش باید هر جایی که میخواهی گریدت پر بشه مثل رویداد لود فرم1


public void button();


فقط وقتی از یک فرم دیگه خواستی گریدت رو پر کن کد زیر رو بنویس


form1 f1 = new form1;
f1.button();



اگه بازم سئوال در مورد پر شدن گرید از یه فرم دیگه داشتی بپرس اگه بدونم کمکت میکنم.

اینجوریم نمیشه
:گریه:

محمد قانعی
سه شنبه 26 اسفند 1393, 21:15 عصر
باید بشه!:متعجب:
ببین توی بالای فرم1 بایداین کد رو اضافه کنی ،تمامش رو بعد از
public partial class Form1 : Form
این کد رو بعد از کد بالا بنویس

public void button()

{
//کد هایی که قراره گریدت رو پر کنه


}


خب حالا اول توی رویداد لود فرم 1 این کد رو بنویس ، اگه هنگام لود شدن فرم گریدت پر نشد بگو!

button();
حالا فهمیدم کجای کارم اشتباه بود.احتمالا الان درست شده باشه.
بعدش توی فرم2 هر جا که میدونی باید کد زیر رو بنویسی


form1 f1 = new form1;
f1.button();

vb-sosol
سه شنبه 26 اسفند 1393, 21:40 عصر
انجام دادم
اینم سورسش

محمد قانعی
سه شنبه 26 اسفند 1393, 21:54 عصر
مگه از چه ورژنی استفاده میکنی؟من از Microsoft Visual Studio 2010استفاده میکنم بازش نمیکنه؟

محمد قانعی
سه شنبه 26 اسفند 1393, 21:55 عصر
خب حالا اول توی رویداد لود فرم 1 این کد رو بنویس ، اگه هنگام لود شدن فرم گریدت پر نشد بگو!

پر شد یا نه؟

اگه پر شد یعنی کد آخری اشکال داره اما اگه پر نشده ایراد یا از کد شماست یا جای کدی که مینویسی جای درستی نیست!

vb-sosol
سه شنبه 26 اسفند 1393, 21:59 عصر
مگه از چه ورژنی استفاده میکنی؟من از Microsoft Visual Studio 2010استفاده میکنم بازش نمیکنه؟



پر شد یا نه؟


از ورژن 2012
نه نمیشه!!!

محمد قانعی
سه شنبه 26 اسفند 1393, 22:26 عصر
من نمیتونم بازش کنم.
این کدها نمونه ای از یک برنامه هستش که توی اون از فرم دومی، گرید فرم اولم رو پر میکنم.


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;
using System.Data.SqlClient;

namespace frooshgahi_sade
{
public partial class frm_bank : Form
{
SqlConnection con = new SqlConnection(frm_main.MyCon);

public void select_bank()
{
SqlDataAdapter da = new SqlDataAdapter("select * from tbl_code_bank", con);
da.SelectCommand.CommandType = CommandType.Text;
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1_bank.DataSource = dt;
}
بعدش توی رویداد لود فرم اول این کد رو مینویسم.


private void frm_bank_Load(object sender, EventArgs e)
{
select_bank();
}
تا این جا رو امتحان کن ببین هنگام لود فرم1 گریدت پر میشه؟

محمد قانعی
سه شنبه 26 اسفند 1393, 22:38 عصر
با سلام.
من هر وقت توی فرم دوم کاری انجام میدم مثل ایجاد یک رکورد توی بانک اطلاعاتی یا هر کار دیگری که باعث تغییر جدولم میشه قبل از بستن فرم 2 دوباره گرید فرم 1 رو پر میکنم تا تغییرات اعمال بشه.حالا شما هم می خوای همین کار رو بکنی یا نه؟ :چشمک:

vb-sosol
سه شنبه 26 اسفند 1393, 22:40 عصر
با سلام.
من هر وقت توی فرم دوم کاری انجام میدم مثل ایجاد یک رکورد توی بانک اطلاعاتی یا هر کار دیگری که باعث تغییر جدولم میشه قبل از بستن فرم 2 دوباره گرید فرم 1 رو پر میکنم تا تغییرات اعمال بشه.حالا شما هم می خوای همین کار رو بکنی یا نه؟ :چشمک:
آره یه همچین چیزی
میخوام وقتی کاربر در فرم 2 یه چیزی اضافه کرد توی فرم 1 گریدویو نشون بده همین!

محمد قانعی
سه شنبه 26 اسفند 1393, 22:49 عصر
سلام.
vb-sosol (http://barnamenevis.org/member.php?65659-vb-sosol) عزیز من با Microsoft Visual Studio 2010 همین کار رو انجام میدم.
همه کار هایی رو که توی پست 30 گفتم رو انجام دادی؟
باز هم موقع لود فرم 1 گریدت پر نمیشه؟

محمد قانعی
سه شنبه 26 اسفند 1393, 22:52 عصر
می تونی قسمت هایی رو که من تو پست 30 گفتم رو بزاری ببینیم مشکل از کجاست.

vb-sosol
سه شنبه 26 اسفند 1393, 23:00 عصر
می تونی قسمت هایی رو که من تو پست 30 گفتم رو بزاری ببینیم مشکل از کجاست.

با نشون دادن توی فرم1 مشکلی ندارم
مشکل من اینه که از فرم دیگه بتونم گریدویو فرم1 رو پر کنم!همین بخدا:عصبانی++:

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

محمد قانعی
سه شنبه 26 اسفند 1393, 23:23 عصر
سلام.
vb-sosol (http://barnamenevis.org/member.php?65659-vb-sosol) عزیز اشتباه از من بود توی فرم 2 باید این کد رو بزاری


frm_bank f1 = (frm_bank)Application.OpenForms["frm_bank"];
f1.select_bank();

p.mohammad
چهارشنبه 14 مرداد 1394, 00:36 صبح
بعد از دو ساعت سرچ پاسخ شما کارم رو راه انداخت .
بهتون خسته نباشید میگم دوست عزیز .