PDA

View Full Version : فرستادن مقدار به فرمي كه هنوز باز نشده است



morteza.azad
شنبه 12 دی 1388, 14:51 عصر
سلام. من مي خوام تو برنامم 2 تا مقدار را از 2 تا تكس باكس بگيرم و اين فرم بسته شه و فرم دوم باز شه و از اين مقادير در فرم دوم استفاده كنم. چطور ميتونم اينكار رو انجام بدم.
با تشكر

c#_programmer
شنبه 12 دی 1388, 15:24 عصر
سلام
شما میتونی یه کلاس به نام common بسازی و هر داده ای رو از طریق این کلاس بین فرمها انتقال بدی.
اعضای common باید static باشند.
مثلا ما می خواییم مقدار x رو که تو فرم1 هست به فرم2 بفرستیم.x رو تو یکی از کلاس commom میریزیم و در فرم2 به x دسترسی داریم.

Saeed.Masoumi
شنبه 12 دی 1388, 18:57 عصر
سلام
به قول دوستان سعی کنید موقع کمک کردن بجای گمراه کردن راهنمایی درست و اصولی انجام دهید صرفا تنها به دلیل اینکه روشی که استفاده می کند مشکل را حل می کند دلیل نمی شود راه شما درست باشد.(به قول دوستان مشکل از شما نمی گیرم مشکل از کد شما می گیرم)
دوست عزیز دونکته:
1-متغیر استاتیک چرا باید استفاده بشه؟
2-مگه کلاس انبار که هرچی خواستی توش بریزی؟
اما جواب بهتر (خوشحال می شم اشتباهم را بگید):
در کد فرم دوم این کد را اضافه کنید:



private string _Text1 = null;
private string _Text2 = null;
public string Text1
{
get { return _Text1; }
set { _Text1 = value; }
}
public string Text2
{
get { return _Text2; }
set { _Text2 = value; }
}


توی فرم یک (ایونت باتنی که قرار است با فشردن آن فرم دومتان باز شود) بنویسید:
توجه:Form2 نام فرم دومتان است.



Form2 FRM2 = new Form2();
FRM2.Text1 = textBox1.Text;
FRM2.Text2 = textBox2.Text;
FRM2.ShowDialog();

حالا زمانی که می خوای از این مقادیر پاس داده شده استفاده کنی از کد زیر استفاده کن(توی قرم دوم مثلا توی ایونت باتن کلیک):


MessageBox.Show("TextBox1 from Form1=" + _Text1 + " TextBox2 from Form1=" + _Text2);

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

morteza.azad
یک شنبه 13 دی 1388, 07:46 صبح
سلام. با تشكر از آقاي معصومي. خيلي عالي بود.

morteza.azad
یک شنبه 13 دی 1388, 07:56 صبح
يه مشكل ديگه هم دارم. اگه من بخوام اين مقادير رو براي چندين فرم بفرستم، آيا بايد واسه همه فرمهايي كه اين مقادير رو ميخوام پراپرتي بسازم و تو فرم اول مقداردهي كنم؟ آيا روش ديگه اي نيست كه من نخوام از فرم اول، فرم هايي كه نياز دارم به اين مقادير دسترسي داشته باشم رو مقداردهي كنم.
يك مثال ميزنم، من فرم لاگين رو براي برنامم درست كردم. حالا بعد از وارد شدن كاربر با يوزرنيم و پسورد توي فرمهاي ديگم به اين نام كاربري و پسورد نياز دارم. اينه سوال من. با تشكر :لبخند:

M.YasPro
یک شنبه 13 دی 1388, 09:03 صبح
يه مشكل ديگه هم دارم. اگه من بخوام اين مقادير رو براي چندين فرم بفرستم، آيا بايد واسه همه فرمهايي كه اين مقادير رو ميخوام پراپرتي بسازم و تو فرم اول مقداردهي كنم؟ آيا روش ديگه اي نيست كه من نخوام از فرم اول، فرم هايي كه نياز دارم به اين مقادير دسترسي داشته باشم رو مقداردهي كنم.
يك مثال ميزنم، من فرم لاگين رو براي برنامم درست كردم. حالا بعد از وارد شدن كاربر با يوزرنيم و پسورد توي فرمهاي ديگم به اين نام كاربري و پسورد نياز دارم. اينه سوال من. با تشكر :لبخند:

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

morteza.azad
یک شنبه 13 دی 1388, 10:27 صبح
m.mosayebi با تشكر از شما.
يعني اين فرم پايه رو هم بايد open كنم؟
نميدونم، اما فكر ميكنم روش خوبي نيست. چون بالاخره يك فرم بدون دليل باز شده و جاري هستش، مگر اينكه فقط مقادير ي جورايي رد و بدل بشه بدون اينكه هيچ فرم ديگه اي باز نشه

M.YasPro
یک شنبه 13 دی 1388, 10:57 صبح
نه دوست خوب
یه فرم میسازی به اسم BaseForm
مثلا با این کدها


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 SaleApplication
{
public partial class BaseForm: System.Windows.Forms.Form
{
int id;
string userName;

public string UserName
{
get { return userName; }
set { userName = value; }
}

public int Id
{
get { return id; }
set { id = value; }
}


public BaseForm()
{
InitializeComponent();
}
}
}


بعد یه فرم دیگه داری به اسم frmMain
مثلا با این کد


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 SaleApplication
{
public partial class frmMain: BaseForm
{
public frmMain()
{
InitializeComponent();
}

که از فرم پایه ارث برده شده نه از System.Windows.Forms.Form
الان frmMain تمام پراپرتی هایی که توی BaseForm به صورت public تعریف شده رو به صورت پیش فرض داره
، شما هر چند بار که بخوای میتونی ازش برای فرم های دیگه هم ارث بری کنی .

اَرژنگ
یک شنبه 13 دی 1388, 14:55 عصر
يه مشكل ديگه هم دارم. اگه من بخوام اين مقادير رو براي چندين فرم بفرستم، آيا بايد واسه همه فرمهايي كه اين مقادير رو ميخوام پراپرتي بسازم و تو فرم اول مقداردهي كنم؟ آيا روش ديگه اي نيست كه من نخوام از فرم اول، فرم هايي كه نياز دارم به اين مقادير دسترسي داشته باشم رو مقداردهي كنم.
يك مثال ميزنم، من فرم لاگين رو براي برنامم درست كردم. حالا بعد از وارد شدن كاربر با يوزرنيم و پسورد توي فرمهاي ديگم به اين نام كاربري و پسورد نياز دارم. اينه سوال من. با تشكر :لبخند:
نگهداری اسم و پسورد کاربر کار درستی نیست.
فرم وظیفه‌اش از نشان دادن کنترلها بیشتر نیست، فرم احتیاج به دانستن اسم و پسورد کاربر ندارد.
مشکل اصلی چی هست که با این روش اشتباه دارید سعی میکنید حل کنید؟
پ.ن. مثل همیشه روش اشتباه ربطی به کاربرنده‌اش ندارد، هر کی از هر روشی که دلش بخواهد آزاد است که استفاده کند ولی برنامه‌نویسی مانند مهندسی از روشهایه درست تشکیل شده.

morteza.azad
یک شنبه 13 دی 1388, 15:23 عصر
من نام كاربري و پسورد رو ميخوام به يك فرم ديگه بفرستم تا اطلاعات ديگه اي رو از ديتابيسم بدست بيارم يا چيزي تو ديتابيس قرار بدم كه بايد اين مقادير رو داشته باشم. اگه راه حلي هست لطفا راهنمائيم كنيد. ممنون

M.YasPro
یک شنبه 13 دی 1388, 15:30 عصر
این کارهارو معمولا با فیلد ID انجام میدن

اَرژنگ
یک شنبه 13 دی 1388, 15:53 عصر
من نام كاربري و پسورد رو ميخوام به يك فرم ديگه بفرستم تا اطلاعات ديگه اي رو از ديتابيسم بدست بيارم يا چيزي تو ديتابيس قرار بدم كه بايد اين مقادير رو داشته باشم. اگه راه حلي هست لطفا راهنمائيم كنيد. ممنون

برایه کار با داتابیس احتیاجی به نگه داشتن اسم و پسورد کاربر نیست و نباید هم نگهداری بشه، روش درست استفاده از Windows Authentication هست که به شکل اتوماتیک اجازه استفاده شدن و یا نشدن را میده. به این شکل مدیریت مرتبط شدن به داتابیس مرکزی میشه.

برایه شروع از
SQL Server trusted connection string
شروع و جستجو کنید.

رفرانس:
http://technet.microsoft.com/en-us/library/ms144284.aspx

morteza.azad
دوشنبه 14 دی 1388, 07:32 صبح
سلام مجدد. شما درست ميگين، حالا به فرض من تونستم آي دي رو هم بدست بيارم، در نهايت بايد اين آي دي رو در سراسر فرمم داشته باشم.
من هيچ اطلاعي از windows Authentication ندارم، لطفا راه حل ساده تر بهم بدين :گریه:

M.YasPro
دوشنبه 14 دی 1388, 08:11 صبح
سلام
شما میخوای برای کاربرانت سطح دسترسی اعمال کنی؟
پروژت چی هست؟

morteza.azad
دوشنبه 14 دی 1388, 09:56 صبح
بله، پرو‍ژه كوچكيه، ميخوام ي بانك سوال درست كنم،
مشكلم اينه كه اين آي دي چجوري به فرمي بره كه هنوز باز نشده ؟

M.YasPro
دوشنبه 14 دی 1388, 10:11 صبح
private void button3_Click(object sender, EventArgs e)
{
Form1 frm = new Form1();
frm.Property1 = 25;
frm.Show();
}


مشكلم اينه كه اين آي دي چجوري به فرمي بره كه هنوز باز نشده ؟
frm.Property1 = 25;

morteza.azad
دوشنبه 14 دی 1388, 11:14 صبح
خوب اينو من قبلا هم گفتم، شايد من اين آي دي رو تو 10 تا فرم نياز داشته باشم، اما همون لحظه نميخوام بازشون كنم، و اينكه فرستادن آي دي به چندين فرم درسته؟ يا اينكه از تو فرممون به ي طريقي بشه اونو حل كرد

M.YasPro
دوشنبه 14 دی 1388, 11:35 صبح
من منظور شما رو نمی فهمم
ما معمولا یه فرم لاگین داریم یه فرم اصلی و چند فرم فرزند
id توی فرم لاگین ساخته میشه ، به فرم اصلی فرستاده میشه و اونجا میمونه تا وقتی که فرم بسته نشده باشه ؟ درسته؟
از فرم اصلی که بخوای هر فرمی رو باز کنی یه پراپرتی از اون فرم رو مقدار دهی می کنی و از اون پراپرتی توی اون فرم فرزند استفاده می کنی
الان مشکل کجاست؟

morteza.azad
سه شنبه 15 دی 1388, 07:51 صبح
مشكلم تو فرم هاي ديگه اي هست كه از فرم اصلي به ارث رفتن. :گیج:

اَرژنگ
سه شنبه 15 دی 1388, 08:45 صبح
من منظور شما رو نمی فهمم
ما معمولا یه فرم لاگین داریم یه فرم اصلی و چند فرم فرزند
id توی فرم لاگین ساخته میشه ، به فرم اصلی فرستاده میشه و اونجا میمونه تا وقتی که فرم بسته نشده باشه ؟ درسته؟

معمولی نیست، نمیدونم این روش را از کجا ترویج کردند ولی روش معمولی و استاندارد استفاده از Windows Authentication است.



از فرم اصلی که بخوای هر فرمی رو باز کنی یه پراپرتی از اون فرم رو مقدار دهی می کنی و از اون پراپرتی توی اون فرم فرزند استفاده می کنی
الان مشکل کجاست؟
با اینکه این روش پیاده کردن درست است، اصل چیزی که میخواهد پیاده بشد (نگهداری کلمه رمز و نام کاربر ) برایه اینکه در هر جا در کانکشن استرینگ استفاده بشه درست نیست.

M.YasPro
سه شنبه 15 دی 1388, 09:02 صبح
ما معمولا یه فرم لاگین داریم یه فرم اصلی و چند فرم فرزند

دوست عزیز معمولی نیست ؟!

اَرژنگ
سه شنبه 15 دی 1388, 09:14 صبح
دوست عزیز معمولی نیست ؟!
این روش ۱۰ سال معمول پیش بود ولی الان دیگر قدیمی شده.
روش معمول الان استفاده از Windows Authentication است.

M.YasPro
سه شنبه 15 دی 1388, 09:21 صبح
معمولی نیست، نمیدونم این روش را از کجا ترویج کردند

ولی منظورتون این نبود .
میشه یه کم از این مدل توضیح بدین . البته اگه زحمتی نیست .

اَرژنگ
سه شنبه 15 دی 1388, 10:10 صبح
ولی منظورتون این نبود .
میشه یه کم از این مدل توضیح بدین . البته اگه زحمتی نیست .
http://msdn.microsoft.com/en-au/beginner/bb964631.aspx
در ۳۰ دقیقه شروع میشه تا ۳۴ دقیقه ادامه دارد.
سوال دیگر بود بپرسید در خدمتیم.

اَرژنگ
سه شنبه 15 دی 1388, 10:51 صبح
دوست عزیز معمولی نیست ؟!
دوست عزیز
قسمتی که معمولی نیست داشتن فرم لگین و نگهداری اسم و کلمه رمز، وگرنه یک فرم اصلی و فرمهایه فرعی هنوز هم استفاده میشه.

morteza.azad
سه شنبه 15 دی 1388, 11:40 صبح
اين حجمش زياده نميشه دانلودش كرد كه، يه جور ديگه توضيح بدين، ي مختصر راجع به اين كه ميگين توضيح بدين اگه آسون بود و مرجع پيدا كرديم بريم دنبالش . ممنون

اَرژنگ
سه شنبه 15 دی 1388, 11:56 صبح
اين حجمش زياده نميشه دانلودش كرد كه، يه جور ديگه توضيح بدين، ي مختصر راجع به اين كه ميگين توضيح بدين اگه آسون بود و مرجع پيدا كرديم بريم دنبالش . ممنون
چیزی که در ۴ دقیقه نمایش داده میشه مگر سخت هم میشه؟
ولی اگر راحت میخواهید:
http://www.connectionstrings.com/sql-server-2008
از Trsuted Connection String استفاده کنید،